【问题标题】:How to find elements through text ignoring the case using Selenium and Xpath如何通过文本查找元素忽略使用 Selenium 和 Xpath 的大小写
【发布时间】:2019-10-21 16:58:56
【问题描述】:

我使用的是 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')]"));

但它返回以下错误:

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

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

那么,你有什么想法可以做到这一点吗?

【问题讨论】:

    标签: java selenium xpath uppercase xpath-1.0


    【解决方案1】:

    要在包含文本 error 的网页中创建元素的列表,忽略大小写,您可以在 中使用 translate() 函数作为如下:

    • 语法:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-11
        • 2017-01-24
        • 1970-01-01
        • 2016-03-12
        • 1970-01-01
        • 2018-08-28
        • 2022-10-14
        • 1970-01-01
        相关资源
        最近更新 更多