java - 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>
解决方案
您需要切换到该 iFrame,例如通过 id:
driver.switchTo().frame("Actionsdb")
请注意,您之后可能需要切换回来。
推荐阅读
- .net - 如何在 Azure 中获取 Windows 10 vm 的用户登录状态
- intellij-idea - 如何将外部 JAR 从一个项目导入到另一个项目?
- html - 用css重新设计两个相邻的div
- selenium - 使用 Python Selenium 滚动页面
- python - 在发出 CTRL+C 命令之前打开读取数据
- google-cloud-storage - 为存储桶中的每个文件运行 Google Cloud 函数
- mongodb - 如果块大小超出 mongodb 中单个分片键的限制 [64 mb] 会发生什么
- html - 在浏览器中查看 .txt 文件的源代码会显示 HTML 标记
- sql-server - Android Studio 显示此错误:ClassNotFoundException com.microsoft.sqlserver.jdbc.Sq;ServerDriver
- apache-spark - 将嵌套 JSON 插入 Hadoop (Spark Java) 的快速方法