如何在 Selenium 中创建不区分大小写的 xpath Java

How to create case insensitive xpath in Selenium Java

我已经在 XPath 下创建,但它没有按预期工作。

我正在检查 html table 的单元格中的文本,我希望匹配特定的单元格。

我已经在 XPath 下创建了但它不起作用。

*//table[@id="customerPortalTable"]//tbody//tr[td[ contains(translate(text(), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "{0}") ]]

{0} - 这是要搜索的值的占位符

我想匹配以下值

测试帐户或测试帐户或测试帐户

<td class="left filterInputColumn">Test Account</td>
<td class="left filterInputColumn">Test ACCOUNT</td>
<td class="left filterInputColumn">TEST ACCOUNT</td>

要创建不区分大小写的 您可以使用以下解决方案:

"//table[@id="customerPortalTable"]//tbody//tr[.//td[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '{}')]]".format(placeholder)

实际上,您的代码行将是:

placeholder= "Test Account"
WebElement element = driver.findElement(By.xpath("//table[@id="customerPortalTable"]//tbody//tr[.//td[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), '{}')]]".format(placeholder)));

参考资料

您可以在以下位置找到一些相关的详细讨论:

一般来说,我认为您的 XPath 没问题。也许问题与您搜索大写字母还是小写字母有关,例如这两个都返回三个 td 节点:

 //td[contains(translate(text(), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), 'TEST ACCOUNT')]
 
 //td[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'test account')]