在Selenium测试中使用XPath通过Text获取WebElement

时间:2015-10-01 20:29:34

标签: java css selenium xpath selenium-webdriver

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

我有兴趣找到的WebElement,

WebElement that I am interested in

其HTML,

Its CSS

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

我目前正在使用,

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

找不到上面的WebElement,但它通常用于检索所有其他Web元素。

甚至,

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:5)

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

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

关于此xpath模式here

有很好的解释

答案 1 :(得分:1)

在下面的HTML中:

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()找到一些相关的讨论: