javascript - 无法在 Selenium 中选择下拉菜单 - 元素不可见

标签 javascript jquery html selenium

我尝试通过 Selenium 选择一个下拉框,并被告知以下内容

Element is not currently visible and so may not be interacted with

经过一番搜索后,我尝试了以下方法,但仍然遇到相同的错误:

        WebElement inputElement = driver.findElement(By
                .id("diningAvailabilityForm-searchTime"));

        ((JavascriptExecutor) driver).executeScript(
                "arguments[0].checked = true;", inputElement);

        ((JavascriptExecutor) driver).executeScript(
                "arguments[0].checked = true;", inputElement);

        ((JavascriptExecutor) driver)
                .executeScript("$(\"#diningAvailabilityForm-searchTime\").show()");

        ((JavascriptExecutor) driver).executeScript(
                "arguments[0].checked = true;", inputElement);

        driver.switchTo().activeElement();
        new Select(inputElement).selectByVisibleText("Dinner");

但是,这会导致相同的错误。当我在浏览器中打开页面时,我可以看到下拉列表,我也可以单击下拉列表。然而,就像我说的 - 使用这段代码并不能实现我所需要的。

输入元素返回,因为值正确。确保通过抛出一些错误来检查它是否正确,但它按预期失败了。

编辑2:

这是 HTML

 <span class="selectBox medium standardFormElement status-closed" id="searchTime-wrapper" data-plugins="[[&quot;pepSelectBox&quot;,{&quot;maxSelectionsLength&quot;:&quot;20&quot;,&quot;maxDisplayOptions&quot;:&quot;8&quot;,&quot;displayScrollBar&quot;:&quot;1&quot;,&quot;displaySpecialDropDown&quot;:&quot;1&quot;,&quot;displaySpecialDropDownHeight&quot;:&quot;21&quot;,&quot;checkIconActive&quot;:&quot;1&quot;,&quot;highlightSelected&quot;:&quot;1&quot;}]]"
data-prependliststyleenhancements="[]" data-appendliststyleenhancements="[]" data-richoptioncontents="[]" data-extraoptionclass="[]" data-richoptgroup="[]" data-a11ytext=" - Opens menu">
      <span class="selectBox-nojs" style="display: none;">
         <select name="searchTime" id="diningAvailabilityForm-searchTime" class="searchTime inputElement" min="06:30:00" max="22:30:00" allday="00:00:00 23:30:00" data-plugins="[[&quot;pepMealTimeOptionModifier&quot;]]">
            <option value="80000712" label="Breakfast" selected="selected">Breakfast</option>
            <option value="80000717" label="Lunch">Lunch</option>
            <option value="80000714" label="Dinner">Dinner</option>
         </select>
      </span>
<span class="richSelectArrowIcon uiGlobalSprite"></span>
<div class="select-toggle hoverable" aria-haspopup="true" aria-owns="diningAvailabilityForm-searchTime-dropdown-list" aria-describedby="diningAvailabilityForm-searchTime-label" aria-labelledby="diningAvailabilityForm-searchTime-label" role="button" tabindex="0"><span class="select-value" data-activeoptionclass=""><span class="rawOption"><span class="accessibleText hidden">Time&nbsp;required  - Opens menu - </span>Dinner</span>
  </span>
</div>
<div class="listWrapper">
  <span class="scrollbarTrack"></span>
  <div class="innerListWrapper">
    <ol class="dropdown-list" id="diningAvailabilityForm-searchTime-dropdown-list" aria-hidden="true" role="listbox" aria-label="Time&amp;nbsp;required  - Opens menu">
      <li role="option" data-value="80000712" data-display="breakfast" data-extraoptionclass="" class="selectOption" id="diningAvailabilityForm-searchTime-0" aria-setsize="36" aria-posinset="1"><span class="rawOption"><span class="accessibleText hidden">Time&nbsp;required  - Opens menu - </span>Breakfast</span>
      </li>
      <li role="option" data-value="80000717" data-display="lunch" data-extraoptionclass="" class="selectOption" id="diningAvailabilityForm-searchTime-1" aria-setsize="36" aria-posinset="2"><span class="rawOption"><span class="accessibleText hidden">Time&nbsp;required  - Opens menu - </span>Lunch</span>
      </li>
      <li role="option" data-value="80000714" data-display="dinner" data-extraoptionclass="" class="selectOption" id="diningAvailabilityForm-searchTime-2" aria-setsize="36" aria-posinset="3">
    </ol>
  </div>
</div>
<span class="shadow-mask"></span>
</span>

最佳答案

您可能试图在该元素可见之前使用它。

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOfElementLocated(by)));
wait.until(ExpectedConditions.refreshed(ExpectedConditions.elementToBeClickable(by)));

适合您情况的有效等待方法

如果不行,你也可以尝试

waitUntil(Waits.elementDisplayed(WebElement));

关于javascript - 无法在 Selenium 中选择下拉菜单 - 元素不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29932651/

相关文章:

javascript - 在子菜单中找到选中的复选框

javascript - 如何响应用户在 jQuery.dataTables 中选择一行?

javascript - Dropzone 在 jquery 选项卡中不起作用

javascript - 如何通过 jquery 在任意位置单击隐藏弹出窗口?

html - CSS 选择器,每 2 个 div 应用 CSS

javascript - Google Maps API 点击事件监听器被执行多次

javascript - 当响应不在数组中时,在 javascript 中解析 JSON 结果

jquery - 隐藏与用户输入不匹配的元素

javascript - 浏览器是否容易通过隐藏在 <img> 数据中的 iframe 加载网页?

jquery - jQuery AJAX XMLHTTPRequest在错误状态下没有有用的信息