【问题标题】:Getting WebElement by Text using XPath in Selenium test在 Selenium 测试中使用 XPath 通过文本获取 WebElement
【发布时间】:2015-12-30 00:34:10
【问题描述】:

我想使用 XPath 查找基于文本的任何 WebElement。

我有兴趣找到的WebElement,

它的 HTML,

基本上我试图通过 Text 检索的 WebElement 包含一个输入元素。

我目前使用,

driver.findElement(By.xpath("//*[normalize-space(text()) = 'Own Hotel']"));

它没有找到上面的 WebElement,但它通常可以检索所有其他 Web 元素。

偶数,

By.xpath("//*[contains(text(),'Own Hotel')]")

没有给我任何结果。虽然我对精确的文本匹配感兴趣。

我正在寻找一种方法,通过与 Web 元素中存在的元素无关的文本来查找 Web 元素。如果文本匹配,它应该返回 WebElement。

谢谢!

【问题讨论】:

  • 页面上没有 iframe。抛出NoSuchElementException
  • 这不是等待问题。我在加载页面时在 chrome 上测试了这个 xpath,它没有找到该元素。因此,我的 xpath 不适用于这种情况。我需要替代 xapth。
  • 请将 HTML 代码发布为文本而不是图片。在将来某个时候,图片将不再可用,这个问题也不会有帮助。

标签: java css selenium xpath selenium-webdriver


【解决方案1】:

似乎文本被包裹在标签内而不是输入。试试这个

driver.findElement(By.xpath(".//label[text()[normalize-space() = 'Own Hotel']]"));

关于这个 xpath 模式有很好的解释 here

【讨论】:

    【解决方案2】:

    在下面的 HTML 中:

    <input> 节点内的innerText Own Hotel 在开头和结尾都包含大量空白字符。由于存在这些前导和尾随空白字符,您不能将位置路径 text() 用作:

    text() 选择上下文节点的所有文本节点子节点


    作为替代方案,您需要使用String Function string normalize-space(string?),如下所示:

    driver.findElement(By.xpath("//*[normalize-space()='Own Hotel']"));
    

    但是,最好添加 tagName 并最好添加一个 unque 属性,使您的搜索更加精细,如下所示:

    • 使用 tagNamenormalize-space():

      driver.findElement(By.xpath("//input[normalize-space()='Own Hotel']"));
      
    • 使用 tagNamenormalize-space():

      driver.findElement(By.xpath("//input[@name='ownHotel' and normalize-space()='Own Hotel']"));
      

    参考文献

    你可以使用 normalize-space() 找到几个相关的讨论:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      相关资源
      最近更新 更多