Selenium:如果select标签包含style =“ display:none;”,如何从下拉菜单中选择选项。

时间:2019-05-17 16:56:53

标签: java selenium-webdriver

我必须执行选择操作,即从下拉列表中选择一个值。这是我的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

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

2 个答案:

答案 0 :(得分:3)

在您发布的HTML中,SELECT被隐藏,因为其中包含style="display: none;"。看起来<ul class="chzn-results">和子LI是可见的“下拉列表”,而隐藏的SELECT则保留了选择后的值。

在这种情况下,您不能使用Select()类。您将需要单击可见的下拉元素(无法分辨是什么……也许是INPUT?),然后使用常规的Selenium方法单击所需的LI

类似的事情应该起作用...

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

答案 1 :(得分:0)

要对click()上的文本为已激活的选项进行操作,因为<select>标签的属性为style="display: none;",则需要使用从<li>标签,您可以使用以下任何Locator Strategies

  • cssSelector

    driver.findElement(By.cssSelector("div.chzn-drop ul.chzn-results li.result-selected")).click();
    driver.findElement(By.cssSelector("div.chzn-drop ul.chzn-results li.active-result[data-option-array-index='1']")).click();
    
  • xpath

    driver.findElement(By.xpath("//div[@class='chzn-drop']//ul[@class='chzn-results']//li[contains(@class, 'result-selected')]")).click();
    driver.findElement(By.xpath("//div[@class='chzn-drop']//ul[@class='chzn-results']//li[contains(@class, 'active-result') and @data-option-array-index='1']")).click();