найти элемент в текущем представлении - PullRequest
3 голосов
/ 16 февраля 2012

Когда я использую метод WebElement#findElement(By) с By.cssSelector, он ищет элемент по всей странице.Но я хочу ограничить выбор только текущим просмотром.Я не хочу позволять Selenium "использовать полосу прокрутки".Как мне этого добиться?

1 Ответ

1 голос
/ 09 июня 2012

Для этого можно получить все элементы на странице, а затем отфильтровать их из области просмотра.

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...