java - Selenium 根据文本或属性中的字符串查找元素

标签 java selenium selenium-webdriver

我试图让 Selenium 根据可以包含在元素文本或任何属性中的字符串找到一个元素,我想知道是否有一些通配符我可以实现来捕获所有这些而不必使用 multi -条件或逻辑。我现在正在使用的是......

driver.findElement(By.xpath("//*[contains(@title,'foobar') or contains(.,'foobar')]"));

我想知道是否有一种方法可以使用通配符而不是特定属性 (@title),它也像 OR 条件的第二部分那样封装元素文本。

最佳答案

这将给出所有包含文本 foobar

的元素
driver.findElement(By.xpath("//*[text()[contains(.,'foobar')]]"));

如果你想要完全匹配,

driver.findElement(By.xpath("//*[text() = 'foobar']"));

或者您可以在 Selenium 中使用 JQuery 执行 Javascript

这将返回包含从父项到最后一个子项的文本的所有 Web 元素,因此我使用 jquery 选择器 :last 来获取包含此文本的最内层节点,但这可能不会如果您有多个包含相同文本的节点,则始终准确。

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar'):last\").get(0);");

如果你想要上面的完全匹配,你需要对结果进行过滤,

(WebElement)((JavascriptExecutor)driver).executeScript("return $(\":contains('foobar')\").filter(function() {" +
    "return $(this).text().trim() === 'foobar'}).get(0);");

jQuery 返回一个元素数组,如果您在页面上只有一个带有该特定文本的 Web 元素,您将获得一个元素数组。我正在执行 .get(0) 以获取数组的第一个元素并将其转换为 WebElement

希望这对您有所帮助。

关于java - Selenium 根据文本或属性中的字符串查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259865/

相关文章:

java - 如何在android中选定的 GridView 项上加载新模板

python - Selenium Web抓取错误: Element Not Interactable

java - 将 Webelement 类型转换为 Select 时出错

excel - 最小化窗口驱动程序 selenium excel vba

java - Java 中不同的可选/选项语义

java - 使用 xyz 坐标和 jzy3d 构建 3d 曲面图

java - com.google.gson.stream.MalformedJsonException : Use JsonReader. setLenient(true) 在将 Selenium 网格节点注册到集线器时接受格式错误的 JSON

python-3.x - 如何在 docker 容器中使用 selenium 设置 python 应用程序

selenium-webdriver - 我们如何处理截断的标签或文本

c# - 匿名方法/函数 : a fundamental feature or a violation of OO principles?