[英]Getting WebElement by Text using XPath in Selenium test
我想使用 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。
谢谢!
似乎文本被包裹在标签内而不是输入。 尝试这个
driver.findElement(By.xpath(".//label[text()[normalize-space() = 'Own Hotel']]"));
有关于这个XPath模式很好的解释在这里
在下面的 HTML 中:
<input>
节点中的innerText Own Hotel在开头和结尾都包含许多空白字符。 由于存在这些前导和尾随空白字符,您不能将位置路径text()
用作:
text()
选择上下文节点的所有文本节点子节点
作为替代方案,您需要使用字符串函数string normalize-space(string?)
,如下所示:
driver.findElement(By.xpath("//*[normalize-space()='Own Hotel']"));
但是,最好让您的搜索更加细化,添加tagName并最好添加一个 unque 属性,如下所示:
使用tagName和normalize-space()
:
driver.findElement(By.xpath("//input[normalize-space()='Own Hotel']"));
使用tagName和normalize-space()
:
driver.findElement(By.xpath("//input[@name='ownHotel' and normalize-space()='Own Hotel']"));
您可以在以下位置使用normalize-space()找到一些相关讨论:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.