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

时间:2019-06-06 07:49:41

标签: java selenium xpath uppercase xpath-1.0

我正在使用Java版本“ 1.8.0_191”和硒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')]"));

但是它返回以下错误:

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')]"));

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

那么,如何实现这项工作的任何想法?

2 个答案:

答案 0 :(得分:1)

要在包含文本错误的网页中创建元素的列表,而忽略大小写,您可以在{{ 3}},如下所示:

  • 语法:

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

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

答案 1 :(得分:0)

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')]"