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

Posted

技术标签:

【中文标题】在 Selenium 测试中使用 XPath 通过文本获取 WebElement【英文标题】:Getting WebElement by Text using XPath in Selenium test 【发布时间】: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 代码发布为文本而不是图片。在将来某个时候,图片将不再可用,这个问题也不会有帮助。 【参考方案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() 找到几个相关的讨论:

How to click on a link with trailing white-space characters on a web page using Selenium? How to locate and click the element when the innerText contains leading and trailing white-space characters using Selenium and Python How to click on the button when the textContext contains leading and trailing white-space characters using Selenium and Python

【讨论】:

以上是关于在 Selenium 测试中使用 XPath 通过文本获取 WebElement的主要内容,如果未能解决你的问题,请参考以下文章

Python3-Selenium自动化测试框架之xpath元素定位

web自动化测试-D3-学习笔记之一(Selenium彩蛋篇-Xpath使用方法)

使用Selenium必会之技能,xpath 定位元素

selenium.common.exceptions.InvalidSelectorException:消息:给定的 xpath 表达式通过 Selenium 在 scrollIntoView 中使用

如何在 Selenium WebDriver 中使用 xPath 来抓取 SVG 元素?

selenium使用Xpath定位之完整篇