严格模式违规当我尝试选择一个选项是另一个选项的子字符串时发生错误

问题描述 投票:0回答:3

首先,我想告诉你,我是这个剧作家工具的新手。我的问题是,当我尝试使用以下代码单击列表中的男性选项时,我有两个选项

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。

java playwright playwright-java
3个回答
1
投票

我遇到了同样的问题,看来剧作家默认搜索子字符串。要精确匹配文本,请使用

exact
参数,如此处所述。


1
投票

在 JavaScript 中,您使用 nth(index) 方法。

await page.locator('//button').nth(index).click();

0
投票

您可能想尝试使用正则表达式。而Java中的Pattern,我相信默认情况下它是区分大小写的,而文本则不是。

page.getByRole(AriaRole.LISTITEM)
  .filter(new Locator.FilterOptions().setHasText(Pattern.compile("Male"))).click();

https://playwright.dev/java/docs/locators#filtering-locators

© www.soinside.com 2019 - 2024. All rights reserved.