javascript 在Playwright测试中,如何点击Material UI的日期选择器按钮?

yfwxisqw  于 2023-03-16  发布在  Java
关注(0)|答案(2)|浏览(270)

我在选择日期选择器按钮打开日历时遇到了问题,因此我无法选择日期。代码生成器运行程序建议使用以下代码:
await page.getByRole('button', { name: 'Choose date, selected date is Feb 14, 2023' }).click();
这将只工作,如果我知道以前选择的日期。我可以使用regex像
await page.getByRole("button", { name: /Choose date, selected date is/ }).click();
但如果页面上有多个日期选择器,则会中断。
我想按Tab键到按钮上,然后按Enter键,例如
await page.getByLabel("Start date").press("Tab").press("Enter");,或者如果我能在日期选择器中找到按钮,比如
await page.getByLabel("Start date").getByRole("button").click();
但这两种方法都不起作用,有办法吗?
还有别的主意吗?
下面是一个示例测试,它可以在之前没有选择日期的情况下工作(注意,我使用first()是因为页面上有其他日期选择器,这是我需要避免的)。

test("select from a date picker", async ({ page }) => {
  await page.goto("https://mui.com/x/react-date-pickers/date-picker/");
  await page.getByLabel("Basic Date Picker").click();
  const datepicker = await page
    .locator("div")
    .filter({ hasText: "Basic date picker" })
    .getByRole("button", { name: "Choose date" })
    .first();
  await datepicker.click();
  await page
    .getByRole("dialog", { name: "Basic date picker" })
    .getByRole("gridcell", { name: "14" })
    .click();
});
oipij1gg

oipij1gg1#

假设它在控件的右边缘有一个图标,单击该图标可以打开日历,您不能用途:

await page.getbyTestId(`CalendarIcon`).click();

这是基于这个material-ui date-picker页面。

46scxncf

46scxncf2#

await page.getByLabel("Start date").getByRole("button").click();不起作用的原因是按钮没有嵌套在日期字段下,它是一个兄弟元素。
首先,您需要获取父对象,然后可以获取其中的按钮。.locator("..")将获取父对象,如本文所述

await page.getByLabel("Start date").locator("..").getByRole("button").click();

只要页面上只有一个开始日期,这就可以了。

相关问题