java - 当元素应该对 webdriver 可见时收到 ElementNotVisibleException

标签 java selenium webdriver selenium-webdriver

我正在尝试让 selenium 单击 li 元素内的链接。这是在 while 循环内发生的。点击一直有效,直到我到达 Firefox 窗口水平以下的 li。如果我在 selenium 尝试单击之前在 Firefox Webdriver 窗口中手动向下滚动,则单击将不会出现错误。

这是我用于点击的java代码。 Menu_item_module 是一个 int,每次循环运行以向下移动列表时,它都会增加 1。下面的 web 元素引用了 li 元素。

driver.findElement(By.id("digitalVellum_dijit_MenuListItem_" + menu_item_module)).click();

这是一个代码片段,其中包含相关页面中的 li 元素之一。

<li id="digitalVellum_dijit_MenuListItem_11" class="dijitLayoutContainer dijitContainer menuListItem level1 item-22 closed dijitLayoutContainer-child dijitLayoutContainer-dijitLayoutContainer" data-dojo-attach-event="onclick:click" data-dojo-attach-point="containerNode" widgetid="digitalVellum_dijit_MenuListItem_11">
<a href="#" data-dojo-attach-point="_link" tabindex="0">
<span class="expander" data-dojo-attach-event="onclick:_toggleState"></span>
<span class="label">Overview</span>
<div class="clearoutfloats"> </div>
</a>
<ul id="digitalVellum_dijit_MenuList_2" class="mainMenu dijitLayoutContainer dijitContainer dijitLayoutContainer-child dijitLayoutContainer-dijitLayoutContainer" data-dojo-attach-point="containerNode" widgetid="digitalVellum_dijit_MenuList_2">
</li>

我尝试使用以下代码让 Selenium 滚动。

JavascriptExecutor jsx = (JavascriptExecutor)driver;
jsx.executeScript("window.scrollBy(0,100)", "");

这似乎没有效果。我认为这可能是因为滚动区域是一个框架,而不是整个页面。无论如何,我认为我根本不需要滚动。我认为 webdriver 在需要选择元素时会自动滚动。

任何帮助或见解将不胜感激。

谢谢, 史蒂夫·阿奇博尔德

最佳答案

即使元素不在 View 中(隐藏),您也可以在其上执行 JavaScript:

JavascriptExecutor jsx = (JavascriptExecutor)driver;
jsx.executeScript("arguments[0].click();", element);

其中 element 是您要单击的元素。

关于java - 当元素应该对 webdriver 可见时收到 ElementNotVisibleException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19847775/

相关文章:

java - 与远程浏览器通信时出错

java - Android - findViewById() 和动态设置 ID

java - Hibernate 更新同一列

Javafx:监听Controller.java中的widthProperty变化

python - 无法弄清楚如何使用/selenium 抓取页面

java - Selenium Java 打开新窗口,关闭它,并再次控制主窗口

将索引替换为加在一起的下 4 个索引的 Java 代码

php - php、selenium 和 chromedriver 的 WebdriverCurlException

c# - 从 C# NUnit 在多个浏览器中依次运行 Selenium 测试

selenium - 基于父子节点的 CSS 选择器?