如何检查下拉选项在Selenium Webdriver中使用Java显示两次

时间:2013-05-10 08:01:17

标签: java selenium selenium-webdriver

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

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

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>

3 个答案:

答案 0 :(得分:0)

我不是一个Java人,所以请原谅我,但你基本上只想loop通过options的所有Select,记录下来,并确保每个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

答案 1 :(得分:0)

这是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());
}

答案 2 :(得分:0)

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);
            }
        }