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. Page Object Pattern. Архитектура тестового проекта.

Уровни абстракции. Создание кастомных элементов.

Уровни абстракции

В автоматизации часто применяются следующие абстракции:

  • Page Object

  • Page Element

Паттерн Page Object хорошо зарекомендовал себя в автоматизации. Основная идея – инкапсулировать логику поведения страницы в классе страницы. Таким образом, тесты будут работать не с низкоуровневым кодом, а с высокоуровневой абстракцией.

Плюсы Page Object:

  • Разделение полномочий: вся логика страницы описывается в Page Object классах, а тестовые классы лишь используют их публичные методы и проверяют результат.

  • DRY – все локаторы помещаются в одном месте

  • Инкапсуляция работы с драйвером. Полезно при кросс-браузерном тестировании

  • Page Objects позволяет записать локаторы в декларативном стиле

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

  • Использование кастомных элементов при создании веб-приложений

  • Присутствие кастомных элементов на многих страницах

В решении этой проблемы может помочь использование наследования, но агрегация видится предпочтительнее. Поэтому лучше воспользоваться паттерном – Page Element. Page Elements – позволяет дробить страницу на более мелкие составляющие – блоки, виджеты и т.д. После чего эти блоки можно переиспользовать в нескольких страницах.

Кастомные элементы

WebDriver очень мощный инструмент, который позволяет выполнять различные действия над элементами страниц. Для этого используется класс WebElement. Но, как и всегда, не все так просто и замечательно. На практике автоматизаторы сталкиваются с тем, что разработчики используют кастомные элементы, с которыми класс WebElement не работает. К примеру, возьмем написание тестов для таблиц. Стандартные классы WebDriver не работают с таблицами, потому нам нужно написать свой, в котором мы опишем работу с элементами таблицы (ячейки, строки и т. д.).

import java.util.List;

public class WebTable {
    private WebElement _webTable;

    public WebTable(WebElement webTable)
    {
        set_webTable(webTable);
    }

    public WebElement get_webTable() {
        return _webTable;
    }

    public void set_webTable(WebElement _webTable) {
        this._webTable = _webTable;
    }

    public int getRowCount() {
        List<WebElement> tableRows = _webTable.findElements(By.tagName("tr"));
        return tableRows.size();
    }

    public int getColumnCount() {
        List<WebElement> tableRows = _webTable.findElements(By.tagName("tr"));
        WebElement headerRow = tableRows.get(0);
        List<WebElement> tableCols = headerRow.findElements(By.tagName("td"));
        return tableCols.size();
    }

    public WebElement getCellEditor(int rowIdx, int colIdx, int editorIdx) {
        try {
            List<WebElement> tableRows = _webTable.findElements(By.tagName("tr"));
            WebElement currentRow = tableRows.get(rowIdx-1);
            List<WebElement> tableCols = currentRow.findElements(By.tagName("td"));
            WebElement cell = tableCols.get(colIdx-1);
            WebElement cellEditor = cell.findElements(By.tagName("input")).get(editorIdx);
            return cellEditor;
        } catch (NoSuchElementException e) {
            throw new NoSuchElementException("Failed to get cell editor");
        }
    }
}
PreviousВспомогательные инструменты.NextАрхитектура. Основные элементы.

Last updated 6 years ago