我想使用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。
谢谢!
答案 0 :(得分:5)
似乎文本被包装在标签内而不是输入。试试这个
driver.findElement(By.xpath(".//label[text()[normalize-space() = 'Own Hotel']]"));
关于此xpath模式here
有很好的解释答案 1 :(得分:1)
在下面的HTML中:
<input>
节点中的 innerText 自己的旅馆,在开头和结尾都包含许多空白字符。由于存在这些前导和尾随空格字符,因此无法将位置路径text()
用作:
text()
选择上下文节点的所有文本节点子节点
作为替代方案,您需要按以下方式使用String Function 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()找到一些相关的讨论: