【问题标题】:How to iteratively click all elements in a dropdown with selenium?如何使用硒迭代地单击下拉列表中的所有元素?
【发布时间】:2019-07-17 21:15:26
【问题描述】:

我正在使用 selenium 和 C# 自动化框架测试 react.js 前端 Web 应用程序,我需要单击下拉列表中的所有元素,理想情况下,我想选择下拉列表作为元素列表,并遍历每个元素并单击它。

我尝试通过 Xpath、Cssselector、cssName 来定位下拉菜单,但似乎都不起作用,当我调试代码时,我的“dropDown”变量始终为空

这是下拉菜单的代码

<div class="dropdown-menu shadow px-4 show">
  <div>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox" value="1">1 </label>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox" value="2">2</label>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox"value="3">3</label>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox" value="4">4</label>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox" value="5">5</label>
        <label class="dropdown-item m-0 px-0 d-block"><input type="checkbox" value="6">6</label>
      </div>
</div>

这是我的硒代码

public static IList<IWebElement> dropDownClick (IWebDriver _driver) {
  IList<IWebElement> dropdown = _driver.FindElements (By.ClassName ("dropdown-menu shadow px-4 show"));
  return dropdown
}

当我在调试模式下运行代码时,我希望变量“dropdown”不为空

【问题讨论】:

  • 您解决了吗?
  • 是的,谢谢大家,这个解决方案有效:``` IList dropdown = _driver.FindElements(By.XPath("//div[contains(@class,'dropdown-menu ')]//标签”)); ```
  • 如果这个问题帮助您解决了问题,请投票

标签: selenium selector dropdown


【解决方案1】:

请使用下面编写的代码来获取元素并单击迭代中的每个元素:

//Below line Finds the dropdown 
WebElement dropdownElement = driver.findElements(By.xpath("//div[contains(@class,'dropdown-menu')]"));

//Below line stores all elements present in dropdown in a list of webelements
List<WebElement> elements = driver.findElements(By.xpath("//div[contains(@class,'dropdown-menu')]//label"));

for(WebElement ele : elements){
    //To click on dropdown
    dropdownElement.click();

    //To click on label present in dropdown. This will change with each Iteration
    ele.click();

}

希望对你有帮助:)

【讨论】:

    【解决方案2】:

    对于 xpath 为什么不直接使用:

     //div[@class='dropdown-menu shadow px-4 show']//label ---yields 6 rows
    

    如果这不起作用,请确保下拉菜单不在 iframe 中。您需要添加 //label,以便所有元素都出现在“FindElements”中。没有它,你的回报是 1。

    【讨论】:

      【解决方案3】:

      请尝试以下 xpath。可能是因为sapce,

      //div[contains(@class,'dropdown-menu')]//label 
      

      【讨论】:

        猜你喜欢
        • 2020-05-20
        • 1970-01-01
        • 2021-12-17
        • 2019-12-14
        • 2019-08-03
        • 2015-12-31
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多