我正在使用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')]"));
但是它也不起作用(因为它不是合法表达)。
那么,如何实现这项工作的任何想法?
答案 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')]"