【问题标题】:How to check that the options in dropdown are displayed twice in Selenium Webdriver using Java如何使用 Java 检查下拉菜单中的选项是否在 Selenium Webdriver 中显示两次
【发布时间】:2022-03-06 20:05:50
【问题描述】:

我陷入了一种逻辑,我必须验证下拉菜单中的选项是否显示两次。我在谷歌搜索解决方案,但没有找到任何解决方案。

我有这段代码可以从下拉列表中获取所有选项。但不确定我应该如何检查选项是否显示两次。

new Select(driver.findElement(By.xpath(//*[@id='unmappedTech']))).selectByVisibleText(VisibleText);
new Select(driver.findElement(By.xpath(//*[@id='unmappedTech']))).getOptions();

在我的应用程序中,选项在下拉菜单中显示两次。下面是下拉菜单的源代码:

<table><tbody><tr>
 <td>
  <select name="unmappedTech" id="unmappedTech" multiple="multiple" size="10" style="width: 160px;">
   <option class=" firepath-matching-node" value="142">Cloud Service Assurance</option>
   <option value="123">Cloud Service Assurance Zenoss for Data Center and Cloud</option>
   <option value="6">CUSTOMER COLLABORATION</option>
   <option value="12">DESKTOP VIRTUALIZATION</option>
   <option value="13">FACILITIES</option>
   <option value="7">INSTANT MESSAGING</option>
   <option value="8">MOBILE COLLABORATION</option>
   <option value="141">Network Address Translation</option>
   <option value="15">NETWORKING</option>
   <option value="3">SECURITY</option>
   <option value="16">STORAGE</option>
   <option value="81">TestTechnology_Dont_Delete</option>
   <option value="10">UNIFIED COMMUNICATIONS</option>
   <option value="20">VCH VIDEO</option>
   <option value="17">VIRTUALIZATION  And  CONSOLIDATION</option>
   <option value="21">VtechnologyVtechnologyVtechnologyVtechnology</option>
   <option value="2">WIRELESS</option>
   <option class=" firepath-matching-node" value="142">Cloud Service Assurance</option>
   <option value="123">Cloud Service Assurance Zenoss for Data Center and Cloud</option>
   <option value="6">CUSTOMER COLLABORATION</option>
   <option value="12">DESKTOP VIRTUALIZATION</option>
   <option value="13">FACILITIES</option>
   <option value="7">INSTANT MESSAGING</option>
   <option value="8">MOBILE COLLABORATION</option>
   <option value="141">Network Address Translation</option>
   <option value="15">NETWORKING</option>
   <option value="3">SECURITY</option>
   <option value="16">STORAGE</option>
   <option value="81">TestTechnology_Dont_Delete</option>
   <option value="10">UNIFIED COMMUNICATIONS</option>
   <option value="20">VCH VIDEO</option>
   <option value="17">VIRTUALIZATION  And  CONSOLIDATION</option>
   <option value="21">VtechnologyVtechnologyVtechnologyVtechnology</option>
   <option value="2">WIRELESS</option>                  
  </select>
 </td>

【问题讨论】:

  • 您的应用是否应该在下拉菜单中有重复的选项?我不确定您是否要将其报告为通过或失败。

标签: java selenium selenium-webdriver


【解决方案1】:

我不是 Java 人,所以请原谅我,但您本质上只是想通过 optionsSelect 中的所有 loop,记录它们,并确保每个 loop迭代,option 不存在,所以伪代码:

Select selectElement = new Select(driver.findElement(By.xpath(//*[@id='unmappedTech'])));
ArrayList<string> options = new ArrayList<string>();
for (WebElement element in selectElement.getOptions()) {
    if (options.contains(element.getText())) {
        // do something that lets the test fail because the option is listed twice
    }
    options.add(element.getText());
}

这不是 Selenium 本身的问题,它只是比较 list 以查看 contained 是否已经在 list 中。

【讨论】:

    【解决方案2】:

    这是java代码。本质上是通过重新检查集合来检查是否发现重复。

    List<WebElement> options = driver.findElement(
            By.xpath("//*[@id='unmappedTech']")).findElements(
            By.tagName("option"));
    HashSet<String> optionNames = new HashSet<>();
    for (WebElement option : options) {
        if (optionNames.contains(option.getText()))
            System.out.println("Duplicate found");
        else
            optionNames.add(option.getText());
    }
    

    【讨论】:

      【解决方案3】:
      Select s = new Select(driver.findElement(
                      By.xpath("//Select[@id='unmappedTech']")));
              List<WebElement> list = s.getOptions();
              Set<String> listNames = new HashSet<String>(list.size());
              for (WebElement element : list) {
                 //Set will not allow to add duplicate value
                  if(listNames.add(element.getText())==false){
                      System.out.println("Duplicate value is: "+element.getText());
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 1970-01-01
        • 2014-08-21
        • 1970-01-01
        • 2017-10-29
        • 2012-08-29
        • 2018-05-09
        • 2016-10-10
        相关资源
        最近更新 更多