我试图通过Selenium选择一个下拉框,我被告知以下
元素目前不可见,因此可能无法与
进行交互
在搜索了一下后,我尝试了以下但仍然被给予同样的错误:
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="[["pepSelectBox",{"maxSelectionsLength":"20","maxDisplayOptions":"8","displayScrollBar":"1","displaySpecialDropDown":"1","displaySpecialDropDownHeight":"21","checkIconActive":"1","highlightSelected":"1"}]]"
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="[["pepMealTimeOptionModifier"]]">
<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 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&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 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 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>
&#13;
答案 0 :(得分:1)
你可能会在元素可见之前尝试使用它。
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOfElementLocated(by)));
wait.until(ExpectedConditions.refreshed(ExpectedConditions.elementToBeClickable(by)));
适合您情况的有效等待方法
如果它不起作用,你也可以尝试
waitUntil(Waits.elementDisplayed(WebElement));
答案 1 :(得分:0)
((JavascriptExecutor) driver)
.executeScript("document.getElementsByClassName(\"selectBox-nojs\")[1].style.display = ''");
((JavascriptExecutor) driver)
.executeScript("document.getElementsByClassName(\"selectBox-nojs\")[2].style.display = ''");