首页 > 解决方案 > Selenium:使用序列选择具有相似属性的元素

问题描述

需要一些关于我使用 c# 编写的 selenium 脚本的帮助。

我正在尝试通过使用“类”属性单击一个元素,但问题是,还有另一个类似的元素共享完全相同的属性,并且这个元素首先出现,因此我的点击是点击第一个元素

此外,“类”是该元素唯一可用的属性。

我要点击的元素是“progressTerm”类下的“cam-taxpicker-button”

<div id = "LeftDivision" class = "LeftFrame">
 <div>
  <div class="cam-taxpicker">
    <div class="cam-taxpicker-button"></div>
  </div>
 </div>

 <div class="progressTerm">
  <div class="cam-taxpicker">
   <div class="cam-taxpicker-button"></div>
  </div>
 </div>
</div>

有没有办法将这些元素保留在列表中并迭代到第二个元素然后才执行操作?这是最好的方法吗?

或者还有其他方法可以执行此操作吗?

提前谢谢了,

标签: c#seleniumselenium-webdriver

解决方案


为了找到具有相同属性的所有元素,您可以使用driver.FindElements();selenium WebDriver 的方法。

因此,在您的情况下,为了找到所有具有类名 'cam-taxpicker-button' 的元素,您可以执行以下操作:

using System.Collections.ObjectModel;

ReadOnlyCollection<IWebElement> elements = driver.FindElements(By.ClassName("cam-taxpicker-button"));

现在它将为您提供与给定 ClassName 匹配的元素集合,如果只有两个元素,您可以通过执行以下操作单击第二个元素: elements[1].Click();

你也可以这样做driver.FindElement(By.XPath("//div[@class='cam-taxpicker-button'][2]")).Click();,但在这种情况下,它总是会在整个 DOM 中找到具有给定类名的第二个元素。


推荐阅读