我想单击列表中的元素,但问题是,该元素存在于列表中,但由于该列表的巨大尺寸,所需元素在页面(当前帧)上不可见。要单击所需元素,我必须向下滚动列表,然后该元素才会可见。
请建议我如何做到这一点。我正在使用使用 Ruby 的 Selenium Webdriver。
我想单击列表中的元素,但问题是,该元素存在于列表中,但由于该列表的巨大尺寸,所需元素在页面(当前帧)上不可见。要单击所需元素,我必须向下滚动列表,然后该元素才会可见。
请建议我如何做到这一点。我正在使用使用 Ruby 的 Selenium Webdriver。
你可以试试这个,
当它可见时捕获元素的 xpath(或通过 id 任何你认为是正确的)
,然后使用 js 点击它
在这里我想点击仅在鼠标悬停时在下拉菜单中可见的注销。
WebElement hiddentElement = driver.findElement(By
.xpath("//*[@id='navright']/li[3]/ul/li[2]/a"));
((JavascriptExecutor) driver).executeScript("arguments[0].click();",
hiddentElement);
Selenium 应该模仿用户行为,因此默认情况下不支持单击不可见元素。
你可能会因为这样做而得到一个例外。
在类似情况下使用过以下解决方案,它对我有用。基本上获取列表的所有元素并使用 Actions 遍历每个元素并获取文本,如果它是必需的选项,则再次使用 Actions 类单击它。
您可以使用 getLocationOnScreenOnceScrolledIntoView 方法使 WebDriver 将元素滚动到视图中:
if (element instanceof Locatable) {
Locatable remoteElement = (Locatable) inputElement;
remoteElement.getLocationOnScreenOnceScrolledIntoView();
}