如何使用 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完成测试

如何在 ruby​​ 中使用 Selenium WebDriver (selenium 2.0) 客户端设置选项

如何在 Java 中使用 Selenium WebDriver (Selenium 2) 输入文本框?