【问题标题】:Can we using regular expression in xpath value?我们可以在 xpath 值中使用正则表达式吗?
【发布时间】:2015-03-08 21:45:33
【问题描述】:

我们可以在 xpath 值中使用正则表达式吗?我正在使用 xpath 值来识别 Web 上的元素以实现自动化。

我有以下 :xpath 值。

:xpath,'//*[@id="ngdialog4"]/div[2]/div[2]/table/tbody/tr/td[1]/input'

但是,最后一位数字 4 ngdialog4 不是恒定的,每次我都会不断变化 打开弹出窗口...我可以使用一些正则表达式来匹配任何数字吗?

【问题讨论】:

    标签: regex selenium xpath selenium-webdriver watir


    【解决方案1】:

    理论上你可以使用matches(),但它是a part of xpath 2.0,webdriver不支持,这里有详细解释:

    改为使用starts-with() 检查:

    //*[starts-with(@id, "ngdialog")]
    

    【讨论】:

    • 如果浏览器有 XPath 引擎,WebDriver 会使用它。如果浏览器的 XPath 引擎不支持它,WebDriver 也不支持。如果浏览器没有 XPath 引擎(通常是 IE),那么 WebDriver 会放置它自己的库以供使用。所以说“它不支持 XPath 2”是不正确的。
    【解决方案2】:

    使用 XPath 2.0:

    :xpath,'//*[matches(@id, '^(ngdialog)[0-9]')]/div[2]/div[2]/table/tbody/tr/td[1]/input'
    

    【讨论】:

      【解决方案3】:

      由于您使用的是 Watir,您还可以使用正则表达式来查找 ngdialog 元素。然后可以将 XPath 用于路径的其他部分(注意以 ./ 开头的 XPath 用于告诉 Watir 在 ngdialog 中查看):

      browser.element(:id => /ngdialog/).checkbox(:xpath => './div[2]/div[2]/table/tbody/tr/td[1]/input')
      

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 2012-01-24
        • 1970-01-01
        • 2013-05-23
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 2021-06-20
        • 1970-01-01
        相关资源
        最近更新 更多