【问题标题】:how to locate dynamic element using xpath(ends-with function not working)如何使用 xpath 定位动态元素(ends-with 函数不起作用)
【发布时间】:2016-03-17 17:14:38
【问题描述】:

我使用 end-with 函数作为 (By.xpath("//input[ends-with(@id,'_PHONE$']"));

但是没有用

【问题讨论】:

  • edit您的问题并添加您要定位的元素的HTML sn-p。
  • hTML 代码是:
  • 您使用的是哪种浏览器?
  • 使用 Mozilla firefox

标签: selenium xpath


【解决方案1】:

ends-with 函数是 XPath 2.0 的一部分,但浏览器通常只支持 1.0。

因此,如果您严格要获取以特定模式结尾的所有元素,您可以获取包含该模式的所有元素(使用 contains() 函数),然后严格检查 id 的后缀(使用Java的.endsWith()方法通过.getAttribute("id")获取属性值。

或者

你可以使用string-length函数、substring函数和equals来获取这个XPath:

"//input[substring(@id, string-length(@id) - string-length('_PHONE$1') +1) = '_PHONE$1']"

【讨论】:

    【解决方案2】:
    driver.findElement(By.xpath("//id[contains(text(),'PHONE$')]"));
    

    【讨论】:

    • 对不起,它对我不起作用。有没有其他解决方案
    【解决方案3】:

    你也可以使用下面的 XPath:-

    //input[contains(@id,'PHONE$1')]
    

    希望对你有帮助:)

    【讨论】:

      【解决方案4】:

      您的 ID 以 _PHONE$1 而不是 _PHONE$ 结尾。请注意,末尾有一个1

      (By.xpath("//input[ends-with(@id,'_PHONE$1']"));
      

      如果您仍然不想匹配该 1,请使用 contains

      By.xpath("//input[contains(@id,'_PHONE$1']"));
      

      【讨论】:

        【解决方案5】:

        使用包含方法

        By.xpath("//input[contains(text(), '_PHONE$']");
        

        或者使用等待显式方法

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多