Блог вебразработчика
  • ГЛАВНАЯ
  • ПОДПИСКА

Selenium WebDriver: прокрутка страницы (scrolling)

Янв14
2013
Написал Tatyana

Selenium Driver При выполнении действий с элементами, Selenium старается автоматически выполнить прокрутку страницы так, чтобы элемент стал видимым в окне браузера. Однако в некоторых случаях, конечный результат может быть не точным, особенно часто это встречается на динамически меняющихся страницах, использующих JavaScript и Ajax. В итоге некоторые действия с WebElement-ами могут выполняться неудачно из-за того, что элемент не находился в области видимости браузера.

Частным случаем для применения прокрутки страницы может быть следующий сценарий:

  1. Выполняете нажатие на элемент.
  2. Selenium прокручивает страницу к элементу (чаще всего элемент при этом оказывается в самом верху экрана).
  3. После этого элемент перекрывается динамически выводимой на экране панелью инструментов или другим элементом.
  4. Selenium пытается выполнить нажатие, которое, естественно, не происходит.

Если в веб-приложении содержатся подобные панели, выводимые поверх остальных веб-элементов, то оптимальным решением будет выполнить прокрутку страницы самостоятельно перед выполнением каких-либо действий. Если Вы правильно проскроллите страницу к элементу и расположите его в области видимости, то Selenium, выполняя заданное действие, уже не будет ничего скроллить:

  1. Самостоятельно прокручиваете страницу к элементу (возможно со смещением, в случае ожидания вывода перекрывающих панелей).
  2. Выполняете нажатие на элемент.
  3. Selenium успешно выполняет нажатие (без прокрутки страницы).

Не редки случаи, когда нужно проскроллить страницу просто так, без выполнения каких-либо действий над элементами, например, для того чтобы сделать скриншот части страницы.

Теперь, когда понятно для чего это можно использовать, рассмотрим, как это можно выполнить. К сожалению, WebDriver не предоставляет никаких явных функций для работы с прокруткой. Тем не менее, есть несколько способов, с помощью которых можно расположить веб-элемент в области видимости окна браузера:

1. Попытаться получить координаты объекта:

((Locatable)webElement).getLocationOnScreenOnceScrolledIntoView();

Вызов метода getLocationOnScreenOnceScrolledIntoView() автоматически вызовет прокрутку страницы к элементу.

2. Проскроллить страницу к элементу с помощью Javascript:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();"
                                                              ,webElement);

3. Проскроллить страницу из текущего положения с заданным смещением:

((JavascriptExecutor)driver).executeScript("window.scrollBy(" + x + ","
                                                              + y + ");");

4. Проскроллить страницу с заданным смещением от элемента:

public void scrollWithOffset(WebElement webElement, int x, int y) {

    String code = "window.scroll(" + (webElement.getLocation().x + x) + ","
                                 + (webElement.getLocation().y + y) + ");";

    ((JavascriptExecutor)driver).executeScript(code, webElement, x, y);

}
  • Нравится
  • Tweet

Опубликовано в Selenium - Помечено Javascript, Selenium WebDriver
Рассказать всем Twitter Facebook Delicious StumbleUpon E-Mail
← Thucydides StepListener отслеживание выполнения тестов
Группировка JUnit тестов с помощью @Category →

5 комментариев

  1. ARM Cortex Development Board's Gravatar ARM Cortex Development Board
    26.01.2013 at 06:23 | Permalink

    I have to confess that i typically get bored learning the entire thing but i believe you can add some value. Bravo !

  2. Олег's Gravatar Олег
    02.03.2013 at 19:37 | Permalink

    Татьяна, спасибо за статью, у меня как раз была проблема, что скролировал до нужных мне элементов, благодаря вам проблему решил. Интересные сочетания, автоматизация тестирования и сео 🙂

  3. Alert's Gravatar Alert
    07.09.2013 at 09:10 | Permalink

    Чтобы прокрутить страницу до конца, динамически подргужаемую ajax во время прокрутки, можно использовать следующий код:
    public void scroll_page_to_the_bottom() {
    ((JavascriptExecutor)getDriver()).executeScript(«function f() {» +
    » window.scrollTo(0, document.body.scrollHeight);» +
    » setTimeout(function(){» +
    » if ($(window).scrollTop() != $(document).height()-$(window).height()){» +
    » f();» +
    » }» +
    » }» +
    » , 500);» +
    » }» +
    «f()»);
    waitABit(5000);
    }

    • Alert's Gravatar Alert
      07.09.2013 at 09:18 | Permalink

      Если же страница целиком уже загружена, то просто:
      ((JavascriptExecutor)getDriver()).executeScript(«window.scrollTo(0, document.body.scrollHeight);»);

  4. alex's Gravatar alex
    05.11.2013 at 13:25 | Permalink

    String script = «function findPos(obj) {var curtop = 0;if (obj.offsetParent) {do {curtop += obj.offsetTop;} while (obj = obj.offsetParent);return [curtop];}}»
    + «//Get object»
    + «var SupportDiv = document.getElementById(‘domainform_id_listSelectItemsText_14’);»
    + «//Scroll to location of SupportDiv on load» + «window.scroll(0,findPos(SupportDiv));»;
    script = «jq(‘#domainform_id_DownList’).scrollTop(jq(
    ‘#domainform_id_listSelectItemsText_14’).position().top)»;
    ((JavascriptExecutor) driver).executeScript(script);

Свежие записи

  • WebDriver и SSL Untrusted certificate
  • Видеозапись выполнения тестов Selenium
  • Selenium WebDriver: basic авторизация
  • BrowserMob Proxy + Selenium: автоматизация сбора данных о производительности
  • Hibernate 4: UserType пользовательский тип данных (часть 2)

Поиск

Рубрики

  • Hibernate ORM
  • SEO
  • Разное
  • Тестирование
    • JUnit
    • Selenium
    • Thucydides

Метки

Actions AJAX Alert AutoIt ChromeDriver Exceptions ExpectedConditions FindElement FirefoxDriver Hibernate InternetExplorerDriver Java Javascript Jenkins JUnit4 Maven PageFactory Page Object RemoteWebDriver Select Selenium IDE Selenium Server Selenium WebDriver switchTo Thucydides WebDriverWait XPath Автоматизированное тестирование база данных заработок в сети сеть Интернет скорость продвижения сайта статейное продвижение услуги продвижения

Реклама


Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing. Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.

Блог вебразработчика
Функциональное тестирование и продвижение сайтов

Яндекс.Метрика