首先,我想告诉你,我是这个剧作家工具的新手。我的问题是,当我尝试使用以下代码单击列表中的男性选项时,我有两个选项
male
和 female
,
page.getByRole(AriaRole.LISTITEM).filter(new Locator.FilterOptions().setHasText("Male")).click();
它抛出以下错误
Exception in thread "main" com.microsoft.playwright.PlaywrightException: Error {
message='Error: strict mode violation: getByRole(AriaRole.LISTITEM).filter(new Locator.FilterOptions().setHasText("Male")) resolved to 2 elements:
1) <li id="cP1Q100" class="z-comboitem">…</li> aka getByRole(AriaRole.LISTITEM).filter(new Locator.FilterOptions().setHasText("Female"))
2) <li id="cP1Q200" class="z-comboitem z-comboitem-sele…>…</li> aka getByRole(AriaRole.LISTITEM).filter(new Locator.FilterOptions().setHasText("Male"))
发生这种情况是因为male是female的子串。如果我尝试单击女性选项,则不会出现任何问题,因为女性在这里是独一无二的。我该如何解决这个问题?我正在使用 Java Playwright。
在 JavaScript 中,您使用 nth(index) 方法。
await page.locator('//button').nth(index).click();
您可能想尝试使用正则表达式。而Java中的Pattern,我相信默认情况下它是区分大小写的,而文本则不是。
page.getByRole(AriaRole.LISTITEM)
.filter(new Locator.FilterOptions().setHasText(Pattern.compile("Male"))).click();
https://playwright.dev/java/docs/locators#filtering-locators