Selenium Webdriver для Java автоматизаторов
  • Introduction
  • Selenium Webdriver. Введение
    • WebDriver. Обзор и принцип работы
    • Основные методы Selenium Webdriver API
    • Типы локаторов
    • Ожидания
    • Пример использования Webdriver API
  • Selenium WebDriver. Сложные вопросы.
    • Локаторы. CSS, XPATH, JQUERY.
    • WebDriver API. Сложные взаимодействия.
    • Контроль за ходом теста. Кастомные ожидания, попапы, алерты, Iframes.
    • DDT подход
  • Page Object Pattern. Архитектура тестового проекта.
    • Использование паттерна Page Object.
    • Альтернативные Page Object подходы.
    • Вспомогательные инструменты.
    • Уровни абстракции. Создание кастомных элементов.
    • Архитектура. Основные элементы.
  • Selenium Grid и "headless" браузеры
    • Использование HtmlUnit драйвера в автотестировании
    • "Headless" тестирование с PhantomJS и SlimerJS
    • Grid. Настройка и использование.
  • Selenium Webdriver. Проблемные моменты
    • Вспомогательные инструменты
    • Basic Authentification Window
    • Загрузка файла
    • Отправление файла (upload)
    • Логгирование в Selenium Webdriver
    • Скриншоты элементов и работа с изображением
  • Selenium Webdriver. Тестирование HTML5 веб приложений
    • Автоматизация Canvas элементов.
    • Автоматизация видео плеера.
    • Работа с web storage.
  • Selenium Webdriver. Расширение инструмента
    • Selenium "обертки" и расширения
    • Thucydides
    • Geb
    • Selenide
    • Репортинг
  • Selenium Webdriver. Тестирование клиентской производительности
    • Navigation timing API
    • Browser Mob Proxy
    • DynaTrace
    • HttpWatch
  • Selenium Webdriver. Behavior-Driven Development.
    • Обзор методологии и инструментов на Java.
    • Cucumber JVM + Selenium Webdriver.
    • JBehave + Selenium Webdriver.
  • Selenium Webdriver. Тестирование на мобильных браузерах
    • Обзор инструментов
    • Установка и настройка Appium. Принципы и основы работы с инструментом
    • Запуск тестов на десктоп и мобильных браузерах
  • Облачные сервисы.
    • Обзор рынка облачных сервисов для тестирования.
    • SauceLabs. Услуги и планы.
    • Настройка тестов для запуска в SauceLabs.
    • Использование Sauce Connect и Travis CI.
  • Continuous Integration
    • Что такое Continuous Integration
    • Распространенные CI-серверы
    • Jenkins - установка и настройка
Powered by GitBook
On this page
  1. Selenium Webdriver. Введение

Ожидания

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

Самый простой пример - переход по ссылке и нажатие кнопки:

driver.get("http://google.com");
driver.findElement(By.id("element_id")).click();

В данном случае необходимо дождаться пока не появится кнопка с id = element_id и только потом совершать действия над ней. Для этого и существуют ожидания.

Ожидания бывают: 1. Неявные ожидания - Implicit Waits - конфигурируют экземпляр WebDriver делать многократные попытки найти элемент (элементы) на странице в течение заданного периода времени, если элемент не найден сразу. Tолько по истечении этого времени WebDriver бросит ElementNotFoundException.

    WebDriver driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://some_url");
    WebElement dynamicElement = driver.findElement(By.id("dynamicElement_id"));

Неявные ожидания обычно настраиваются сразу после создания экземпляра WebDriver и действуют в течении всей жизни этого экземпляра, хотя переопределить их можно в любой момент. К этой группе ожиданий также можно отнести неявное ожидание загрузки страницы: driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); А также неявное ожидание отработки скриптов: driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS); 2. Явные ожидания - Explicit Waits - это код, который ждет наступления какого-то события (чаще всего на AUT), прежде чем продолжит выполнение команд скрипта. Такое ожидание срабатывает один раз в указанном месте.</p>

Самым худшим вариантом является использование ``` Thread.sleep(1000)```, в случае с которым скрипт просто будет ждать определенное количество времени. Это не гарантирует наступление нужного события, либо будет слишком избыточным и увеличит время выполнения теста.

Более предпочтительно использовать WebDriverWait и ExpectedCondition:

WebDriver driver = new FirefoxDriver();
driver.get("http://some_url");
WebElement dynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("dynamicElement_id")));

В данном случае скрипт будет ждать элемента c id = dynamicElement_id в течении 10 секунд, но продолжит выполнение, как только элемент будет найден. При этом WebDriverWait класс выступает в роли конфигурации ожидания - задаем, как долго ждать события и как часто проверять его наступление. ExpectedConditions - статический класс, содержащий часто используемые условия для ожидания.

PreviousТипы локаторовNextПример использования Webdriver API

Last updated 6 years ago