我试图让 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/