如何使用 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 xpath如下:
语法:
translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')
代码行:
List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));
我正在使用 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 xpath如下:
语法:
translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')
代码行:
List<WebElement> elementList = driver.findElements(By.xpath("//*[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'error')]"));