从div类下拉列表中选择 - Selenium

时间:2016-01-13 15:40:43

标签: java selenium drop-down-menu selenium-webdriver css-selectors

我试图从下拉菜单中选择一个选项,直到点击定位器为止。这就是我在Firebug中看到的:

div class="selectize-input items not-full has-options">
<input type="text" autocomplete="off" tabindex="" placeholder="523-23-XXXXX" style="width: 109px; opacity: 1; position: relative; left: 0px;">
</div>
<div class="selectize-dropdown multi form-control" style="display: none; width: 263px; top: 34px; left: 0px; visibility: visible;">
<div class="selectize-dropdown-content">
<div class="option" data-selectable="" data-value="523-23-20273">523-23-20273</div>
<div class="option" data-selectable="" data-value="523-23-20274">523-23-20274</div>
<div class="option" data-selectable="" data-value="523-23-20275">523-23-20275</div>
<div class="option" data-selectable="" data-value="523-23-20276">523-23-20276</div>
<div class="option" data-selectable="" data-value="523-23-20280">523-23-20280</div>
<div class="option" data-selectable="" data-value="523-23-202801">523-23-202801</div>

到目前为止我的代码是:

public void selectAgentCodes(String agentCode)
    {
        driver.findElement(byAgentCodes).click();
        new WebDriverWait(driver, 5).until(ExpectedConditions.visibilityOfElementLocated(By.className("selectize-dropdown-content")));
        Select select = new Select(driver.findElement(By.className("selectize-dropwodn-content")));
        select.selectByVisibleText(agentCode);
    }

我得到一个 UnexpectedTagNameException:元素应该是&#34;选择&#34;但是&#34; div&#34; 。我不确定如何处理这个,因为我之前只使用过选择。

让我们说我想选择&#34; 523-23-20275&#34;代理商代码。我该怎么做?

任何帮助表示赞赏!感谢。

3 个答案:

答案 0 :(得分:4)

这不是正常的下拉选择菜单。因此,在这种情况下使用Select将不起作用。如果没有看到完整的网站,我不确定要选择它必须做些什么。

但是,当下拉列表中的选项可见时,只需点击div元素即可。

//I'm assuming that this will display the dropdown list
driver.findElement(byAgentCodes).click(); 

driver.findElement(By.xpath("//div[@data-value='523-23-20275']"));

答案 1 :(得分:0)

这里,如果UI中没有选择标记,则选择类将不起作用,您需要单击主div,然后您需要单击任何具有多个选项的div,它将首先单击下拉列表然后单击列表中的特定元素, 下面的代码有望为你工作....

1)首先你需要点击这个div,通过id,xpath,css选择器等任何可用方法找到它, driver.findElement(byAgentCodes)。单击(); 点击此按钮将打开一个下拉列表

2)重复上述第1点,点击下拉列表中的任何列表项

523-23-20275

这将有效。

答案 2 :(得分:0)

请按照以下步骤在div标签下选择一个项目:

您必须使用collections对象来存储所有存储在同一标签下的子元素。 对于Ex,如果您具有以下HTML结构:

<div id="Year">
    <div class="abc">
         <ul class = "xyz">
             <li id=1>2000</li>
             <li id=2>2001</li>
             <li id=3>2002</li>
             <li id=4>2003</li>
             <li id=5>2004</li>
         </ul>
    </div>
</div>

在硒代码下面写上

List<Webelement> lst = driver.findElements(By.xpath(<locator of child elements>));

//In this case it is //div[@id='Year']/div/ul/li

系统会将所有子元素存储在列表中,然后您可以使用索引方法通过索引方法选择任何元素

lst.get(<index value>).click();

如果您不想使用索引查找,而是文本,请使用Iterator界面从集合中查找元素,然后单击该元素:

Iterator<Webelement> it = lst.iterator();
while (it.hasNext()) {
    WebElement wb  = it.next();
    if(wb.getText().equals(<Text to find in double quotes>)) {
        wb.click();
        break;
    }

}