如何使用 Selenium 和 Xpath 通过忽略大小写的文本查找元素

How to find elements through text ignoring the case using Selenium and Xpath

我正在使用 java 版本“1.8.0_191”和 selenium 3.141.59.

我正在尝试查明某个页面是否包含单词 "error" 或 "erreur"。另外,我希望它不区分大小写。

查找文本很容易:

List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(text(), 'error')]"));

我很难让它不区分大小写。到目前为止,我试过这个(灵感来自 this question):

List<WebElement> elementList = driver.findElements(By.xpath("/html/body//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));

但是return出现以下错误:

org.openqa.selenium.WebDriverException: TypeError: Expected an element or WindowProxy, got: [object Text] {}

我也试过这个:

 List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(transate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));

但它也不起作用(因为它不是合法的表达式)。

那么,关于如何使这项工作有任何想法吗?

XPATH 2 允许进行不区分大小写的匹配,但大多数浏览器都有 XPATH 1。

最好的办法是在一个 XPATH 中使用文本组合。喜欢:

"//*[contains(text(), 'error') or contains(text(), 'ERROR') or contains(text(), 'erreur') or contains(text(), 'ERREUR')]"

OR

"//*[contains(text(), 'error')] | //*[contains(text(), 'ERROR')] | //*[contains(text(), 'erreur')] | //*[contains(text(), 'ERREUR')]"

要在包含文本 error 的网页中创建 list 元素,忽略 upper/lower 情况,您可以使用translate() function within an 如下:

  • 语法:

    translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')
    
  • 代码行:

    List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));