Selenium: как выбрать параметры из выпадающего списка, если тег select содержит стиль = "display: none;" - PullRequest
1 голос
/ 17 мая 2019

Мне нужно выполнить действие select, т.е. выбрать значение из выпадающего списка. Вот код моего 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 ]

2 голосов
/ 17 мая 2019

В опубликованном вами HTML-коде SELECT скрыт, поскольку содержит style="display: none;". Похоже, что <ul class="chzn-results"> и дочерние элементы LI являются видимым «выпадающим списком», в то время как скрытые значения SELECT содержат значения после выбора.

В подобных случаях вы не можете использовать класс Select(). Вам нужно будет щелкнуть видимый выпадающий элемент (не могу сказать, что это ... может быть INPUT?), А затем щелкнуть по нужному LI, используя обычные методы Selenium.

Как-то так должно работать ...

driver.findElement(By.cssSelector("div.chzn-search > input")).click();
driver.findElement(By.xpath("//ul[@class='chzn-results']/li[.='Activated']")).click();
0 голосов
/ 17 мая 2019

К click() для опции с текстом как Активировано , так как тег <select> имеет атрибут style="display: none;", вам нужно использовать команду выбора из тегов <li>, и вы можете используйте одну из следующих стратегий локатора :

  • 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();
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...