【问题标题】:How to use OR Condition in selenium findElements() method for any selector?如何在 selenium findElements() 方法中为任何选择器使用 OR 条件?
【发布时间】: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 条件。

标签: selenium css-selectors webdriver


【解决方案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。在我的例子中,这是进行一般测试的最佳方式,因为我们的网站有多个版本的同一页面/按钮,它们执行相同的操作。
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 2021-04-18
  • 2011-06-12
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多