如何使用 Selenium WebDriver、Java 通过文本选择 Web 元素
Posted
技术标签:
【中文标题】如何使用 Selenium WebDriver、Java 通过文本选择 Web 元素【英文标题】:How to select a web element by text with Selenium WebDriver, Java 【发布时间】:2015-08-19 08:13:53 【问题描述】:我需要在网页上找到以下元素
<div class="b-datalist__item__addr">noreply@somedomain.com</div>
我正在使用 Java 为 Selenium WebDriver 编写代码。
需要此元素的确切 CSS 选择器才能将其与 driver.findElement(By.cssSelector(the-selector).click
命令一起使用。div[class='b-datalist__item__addr']
选择器不够好,因为我必须根据不是链接的 noreply@somedomain.com
文本进行搜索,所以我不能使用 @ 987654325@ 命令。
【问题讨论】:
【参考方案1】:Css 不允许您进行基于文本的搜索。 xpath 是那里唯一的选择。
//div[contains(text(),'noreply@somedomain.com')]
【讨论】:
有没有办法将类名或任何附加参数添加到上面的 xpath 选择器? @Eliyahu 是的。您可以轻松添加//div[contains(text(),'noreply@somedomain.com')][@class='classname']
。使用@
,因为类名是一个属性【参考方案2】:
contains(node, substring)
可能会解决问题,但请注意,如果有多个元素具有相似的文本内容,例如
noreply@somedomain.com
office.noreply@somedomain.com
home.noreply@somedomain.com
谓词[contains(text(),'noreply@somedomain.com')]
将匹配所有这些
在这种情况下最好使用starts-with(node, substring)
:
//div[starts-with(text(),'noreply@somedomain.com')]
或通过确切的文本内容获取所需的元素:
//div[text()='noreply@somedomain.com']
【讨论】:
以上是关于如何使用 Selenium WebDriver、Java 通过文本选择 Web 元素的主要内容,如果未能解决你的问题,请参考以下文章
Selenium & webdriver.io 如何使用 executeScript?
如何使用selenium webdriver来判断一个网页加载完毕
如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?
在Jmeter中使用Selenium WebDriver完成测试