Для этого можно получить все элементы на странице, а затем отфильтровать их из области просмотра.
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()
.