当我将方法WebElement#findElement(By)
与By.cssSelector
一起使用时,它会在整个页面中搜索元素。但我想通过current-view-only来限制选择。我不想让Selenium“使用滚动条”。我怎样才能做到这一点?
答案 0 :(得分:1)
实现这一目标的方法可能是获取页面上的所有元素,然后将其从视口中过滤掉。
WebElement.getLocation()
是此的基础工具。
如果您位于页面的左上角(加载后默认),则可以使用window.innerHeight
和window.innerWidth
(大多数浏览器,但IE9 +)。
// assuming JS is enabled for this instance of driver
JavascriptExecutor js = (JavascriptExecutor)driver;
int viewportWidth = (Integer)js.executeScript("return window.innerWidth;");
int viewportHeight = (Integer)js.executeScript("return window.innerHeight;");
List<WebElement> list = driver.findElements(By.cssSelector("whatever"));
for (Iterator<WebElement> iter = list.iterator(); iter.hasNext(); ) {
WebElement elem = iter.next();
Point p = elem.getLocation();
if ((p.getX() > viewportWidth) || (p.getY() > viewportHeight)) {
iter.remove();
}
}
如果您无法确定视口是否处于默认位置(坐标[0,0]处),则可以添加window.mozInnerScreenX
和window.mozInnerScreenY
(需要Firefox 3.6+)条件。或者,可能更好,window.scrollX
和window.scrollY
。
您还必须定义是否包含部分显示的元素,并相应地调整算法(WebElement.getSize()
以进行救援!)。
如果您在搜索后遇到问题,视口会发生变化,请尝试通过window.scroll()
将其恢复到原始位置。