0

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

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

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>
4

3 回答 3

0

我不是 Java 人,所以请原谅我,但您本质上只是想loop通过所有这些optionsSelect记录它们,并确保每次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 本身的问题,它只是比较 alist以查看其中是否已经存在某些contained东西list

于 2013-05-10T08:29:19.470 回答
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());
}
于 2013-05-10T08:41:42.077 回答
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.getText());
            }
        }
于 2019-01-28T06:44:38.727 回答