首页 > 解决方案 > Selenium div 下拉列表 - 元素不可见

问题描述

我正在尝试按下按钮来发送输入。我的问题是 Selenium 似乎没有找到它,尽管当我打开列表时它显示在屏幕上。

打开列表的按钮:

<input type="button" id="opensDiv" value="Actions" style="width: 137px; padding: 1px 2px;" class="ButtonOn" onclick="dropdowns.get(0).toggle();" onmouseover="dropdowns.get(0).menuenter();this.className='ButtonOn';" this.classname="ButtonOff" ; "=" ">

列表本身:

<div id="dropdown-list" class="dropdown-list" style="display: none; top: 157px; left: 1696px; width: 161px; padding-top: 24px;">
  <div class="dropdown-list-wrap">
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(ButtonINeed)');">iNeedThisButton</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
    <div class="dropdown-list-item" onclick="document.getElementById('dropdown-list').style.display ='none';var w = document.getElementById('elem').contentWindow;w.eval('execute(somethingHere)');">somethingHere</div>
  </div>
</div>

我已经尝试使用 JavaScript 更改可见性:

String js = "arguments[0].style.height='auto'; arguments[0].style.visibility='visible';";
((JavascriptExecutor) driver).executeScript(js, iNeedThisButton);

打开列表后尝试单击它:

driver.findElement(By.xpath("//div[contains(text(),'iNeedThisButton')]")).click();
Actions builder = new Actions(driver);
builder.moveToElement(iNeedThisButton).click().build().perform();

注意:此列表位于已输入的 iframe 中。

编辑:这是其中的 iframe:

<iframe id="Actionsdb" style="visibility:hidden;position:absolute;width: 0px;height:162px;z-index:99;margin-left:7px;margin-top:19px;" src="plain.html" frameborder="0" scrolling="no"></iframe>

标签: javaselenium

解决方案


您需要切换到该 iFrame,例如通过 id:

driver.switchTo().frame("Actionsdb")

请注意,您之后可能需要切换回来。


推荐阅读