如何在 selenium findElements() 方法中为任何选择器使用 OR 条件?
Posted
技术标签:
【中文标题】如何在 selenium findElements() 方法中为任何选择器使用 OR 条件?【英文标题】:How to use OR Condition in selenium findElements() method for any selector? 【发布时间】:2011-07-18 17:54:29 【问题描述】:我想获取所有类名为“act”或“dact”的 WebElement 信息
我正在使用下面的代码行来获取“act”的所有类信息。谁能帮我在类名中使用 OR 条件?
List<WebElement> nL2 = driver.findElements(By.className("act"));
类似的东西;这样我就不必为每个类写两行了。
//this is not working
List<WebElement> nL2 = driver.findElements(By.className("act | dact"));
谢谢!
【问题讨论】:
这不是 XPath。这是 XPath//WebElement[@class[contains(concat(' ',.,' '),' act ') or contains(concat(' ',.,' '),' dact ')]]
@Alejandro,我的错。修改了我的问题。实际上我想使用任何选择器在fineElements() 方法中使用OR 条件。
【参考方案1】:
我知道这个问题很老了,但可能最简单的方法是使用 CSS 选择器,例如
driver.findElements(By.cssSelector(".act, .dact"));
您应该更喜欢 CSS 选择器而不是 XPath,因为浏览器支持更好,而且它们的性能更高(而且我认为它们更容易学习/理解)。 CSS 选择器可以做任何事情 By.className()
可以做的还有很多。它们非常强大且非常有用。
一些 CSS 选择器参考可帮助您入门。
W3C CSS Selector Reference
Sauce Labs CSS Selector Tips
【讨论】:
这是迄今为止最优秀的解决方案。【参考方案2】:你能把这两个列表结合起来吗?
List<WebElement> act = driver.findElements(By.className("act"));
List<WebElement> dact = driver.findElements(By.className("dact"));
List<WebElement> all = new ArrayList<WebElement>();
all.addAll(act);
all.addAll(dact);
或者,您可以按照@Alejandro 的建议使用 xpath 定位器
List<WebElement> all = driver.findElements(By.xpath("//*[@class='act' or @class='dact']"));
【讨论】:
谢谢戴夫,我不想这样做。 我们也可以使用By.className("X or Y");
还是这个OR条件只适用于XPath?
className
采用单个类名。
有没有其他像 XPath 这样接受多个的方法??
+1 用于条件 xpath。在我的例子中,这是进行一般测试的最佳方式,因为我们的网站有多个版本的同一页面/按钮,它们执行相同的操作。以上是关于如何在 selenium findElements() 方法中为任何选择器使用 OR 条件?的主要内容,如果未能解决你的问题,请参考以下文章
在 Selenium 中的许多 findElement(s)/By 函数中,您啥时候会使用其中一个?
selenium 如何缩小范围后在定位元素比如缩小到某一个div,在定位