繁体   English   中英

在 Selenium 测试中使用 XPath 按文本获取 WebElement

[英]Getting WebElement by Text using XPath in Selenium test

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

我有兴趣找到的 WebElement,

我感兴趣的 WebElement

它的 HTML,

它的 CSS

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

我目前使用,

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

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

甚至,

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

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

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

谢谢!

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

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

有关于这个XPath模式很好的解释在这里

在下面的 HTML 中:

HTML

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

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


作为替代方案,您需要使用字符串函数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()找到一些相关讨论:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM