我正在尝试让 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/