首页 > 解决方案 > Selenium:如果选择标签包含样式=“显示:无;”,如何从下拉列表中选择选项

问题描述

我必须执行选择操作,即从下拉列表中选择一个值。这是我的 iframe 的代码:

<div class="js-stools-field-filter">
    <select id="filter_active" name="filter[active]" onchange="this.form.submit();" style="display: none;">
        <option value="" selected="selected">- Select Active State -</option>
        <option value="0">Activated</option>
        <option value="1">Unactivated</option>
    </select>
    <div class="chzn-container chzn-container-single chzn-container-single-nosearch chzn-container-active chzn-with-drop" style="width: 220px;" title="" id="filter_active_chzn"><a class="chzn-single"><span>- Select Active State -</span><div><b></b></div></a>
        <div class="chzn-drop">
            <div class="chzn-search">
                <input type="text" autocomplete="off" readonly="" class="active">
            </div>
            <ul class="chzn-results">
                <li class="active-result result-selected" data-option-array-index="0" style="">- Select Active State -</li>
                <li class="active-result" data-option-array-index="1" style="">Activated</li>
                <li class="active-result" data-option-array-index="2" style="">Unactivated</li>
            </ul>
        </div>
    </div>
</div>

我需要从下拉列表中选择选项。这是我的脚本:

Select sc = new Select(driver.findElement(By.id("filter_active")));
sc.selectByVisibleText("Activated");

但是,我在控制台中收到此错误:

Element is not currently visible and may not be manipulated

有人可以让我知道如何解决这个问题。

标签: javaselenium-webdriver

解决方案


在您发布的 HTML 中,SELECT是隐藏的,因为它包含style="display: none;". 看起来 the<ul class="chzn-results">和 childrenLI是可见的“下拉菜单”,而 hiddenSELECT保存选择后的值。

在这种情况下,您不能使用Select()该类。您将需要单击可见的下拉元素(不知道那是什么……也许是INPUT?),然后LI使用普通的 Selenium 方法单击所需的元素。

像这样的东西应该工作......

driver.findElement(By.cssSelector("div.chzn-search > input")).click();
driver.findElement(By.xpath("//ul[@class='chzn-results']/li[.='Activated']")).click();

推荐阅读