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

Selenium 2: ожидание событий

Апр20
2012
Написал Tatyana

В этой статье мы рассмотрим тестирование WEB-приложений, использующих AJAX (т.е. при обновлении данных веб-страница не перезагружается полностью, изменяются лишь необходимые элементы). Автоматизация тестирования такого приложения ничем не отличается от автоматизации тестирования обычного WEB-приложения, за исключением того, что необходимо дожидаться выполнения AJAX-запроса. Например, если выполнение запроса добавляет элементы в DOM, то преждевременное обращение к таким элементам приведет к NoSuchElementException. Это происходит потому, что тест выполняется быстрее, чем сам AJAX-запрос.

Использовать Thread.sleep(), устанавливающий ожидание истечения заданного времени, для решения этой проблемы очень не рекомендуется. По той простой причине, что нельзя заранее определить сколько времени может понадобиться на выполнение запроса, а если выделять время, так сказать, с запасом, то это приведет к тому, что тесты будут выполняться слишком долго (долго — это очень относительно, но точно дольше, чем могли бы).

Selenium 2 для таких случаев предоставляет возможность использовать явные и неявные ожидания.

Неявное ожидание указывает WebDriver опрашивать DOM в течение конкретного периода времени при поиске элементов, в случае если они не появились сразу. По умолчанию это значение равно 0. Если значение было однажды установлено, то оно будет использоваться перед выполнением каждой команды findElement, ожидая элемент, на протяжении жизни экземпляра объекта WebDriver, либо пока не будет изменено.

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

Стоит обратить внимание на то, что метод findElements ищет хотя бы один элемент удовлетворяющий условию поиска. И если такой элемент найден в момент обращения, то он возвращает его, не дожидаясь пока появятся остальные элементы.

Однако, имплицитные ожидания не позволяют дожидаться таких событий как, например, исчезновение элемента из DOM или смены свойств элемента. Для таких событий нужно использовать явные ожидания. Явные ожидания выполняются единожды, ожидая возникновения определенных условий в течение указанного периода времени. Для организации явных ожиданий Selenium предоставляет класс WebDriverWait и интерфейс ExpectedCondition.

WebDriver driver = new FirefoxDriver();
(new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                return d.getTitle().contains("MyTitle");
            }
        });

В случае, если условие не было выполнено по истечении указанного времени, возращается TimeoutException.
По умолчанию WebDriverWait вызывает ExpectedCondition каждые 500 миллисекунд до тех пор, пока условие не будет удовлетворено. Это значение можно изменить, установив свойство pollingEvery(sleepTimeOut, TimeUnit.MILLISECONDS) или используя конструктор WebDriverWait(WebDriver driver,long timeOutInSeconds,long sleepInMillis), принимающий 3-им параметром длительность в миллисекундах между опросами. По умолчанию WebDriverWait игнорирует NotFoundException, возникающее при вызове условия. Вы можете добавить больше исключений в список игнорирования, используя ignoring(Exception.class).
Следует также обратить внимание на класс ExpectedConditions, он предоставляет готовые условия ожидания. Вот некоторые из них:

  • stalenessOf(WebElement element) — ожидание пока элемент исчезнет из DOM;
  • titleIs(java.lang.String title) — ожидание заголовка страницы;
  • textToBePresentInElement(By locator, java.lang.String text) — ожидание заданного текста в элементе;
  • visibilityOfElementLocated(By locator) — ожидание, что элемент присутствует в DOM и виден.

Полный список возможных условий можно посмотреть по этой ссылке.

Приведенный ранее пример можно переписать следующим образом, используя ExpectedConditions:

WebDriver driver = new FirefoxDriver();
(new WebDriverWait(driver, 10))
                .until(ExpectedConditions.titleContains("MyTitle"));

Условия для проверки можно делать сколь угодно сложными, все зависит от конкретного случая и ситуации.

  • Нравится
  • Tweet

Опубликовано в Selenium - Помечено AJAX, ExpectedConditions, Selenium WebDriver, WebDriverWait
Рассказать всем Twitter Facebook Delicious StumbleUpon E-Mail
← SELENIUM DRIVER: используем InternetExplorerDriver
SeleniumDriver + JUnit4 →

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/u0420283/data/www/internetka.in.ua/wp-includes/class-wp-comment-query.php on line 405

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

  1. Вадим's Gravatar Вадим
    26.07.2012 at 14:03 | Permalink

    Спасибо! А я тут со Thread.sleep() мучился…

  2. Иван's Gravatar Иван
    19.10.2012 at 04:11 | Permalink

    Огромное спасибо!

  3. Vladislav's Gravatar Vladislav
    29.11.2012 at 07:27 | Permalink

    Татьяна как написать команду, жди пока страница полностью не загрузиться? ну как в selenium IDE «clickandwait «

    • Tatyana's Gravatar Tatyana
      29.11.2012 at 07:40 | Permalink

      Если речь идет о клике на ссылку или о команде driver.get(URL), то ожидание происходит автоматически, т.е. если нажатие на элемент вызывает загрузку новой страницы, то этот метод будет блокировать дальнейшее выполнение, пока страница не загрузится. Но это относится только к загрузке самой страницы, отслеживание завершения AJAX запросов на ней нужно выполнять самостоятельно.

  1. Selenium WebDriver: поиск элементов на странице — Блог вебразработчика on 12.07.2012 at 14:14
  2. PageObject для AJAX-приложений — Блог вебразработчика on 08.09.2012 at 17:20

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

  • 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.

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

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