Повышаем надёжность тестов через javascript

Post on 16-Nov-2014

8.884 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Доклад с конференции SeleniumCamp'2014

TRANSCRIPT

Повышаем надёжность тестов через JavaScript

Игорь Хролhttp://www.khroliz.com

О себе• Игорь Хрол• QA Automation Team Lead в

Wargaming• Более семи лет в автоматизации

тестирования• Десятки проектов• Инженер, тренер, консультант,

менеджер, докладчик• Опыт работы с Selenium’ом – более 5

лет• Мой блог: http://ru.khroliz.com

Постоянный участник SeleniumCamp

О чём говорим?

• Теоретические рассуждения и общие размышления

• Практическая применимость идеи

Зависимость между уровнем тестов и поддержкой

UI-тесты ненадёжны

UI-тесты ненадёжны

Одна из причин - современные пользовательские интерфейсы:– Сложные– Асинхронные

Современные интерфейсы строятся на уже готовых компонентах

Современные интерфейсы строятся на уже готовых компонентах

Готовые компоненты можно меньше тестировать

Кастомные компоненты можно тестировать отдельно

http://seleniumcamp.com/archive/selenium-camp-2013/materials/unit-testing/

Спасибо, Dmitriy Kovalenko

Большинство современных UI имеет внутренний API

Преимущества API

• Заточен для взаимодействия с контролами• Синхронный (или есть методы для

синхронизации)

1. UI на готовых компонентах2. Готовые компоненты можно не тестировать

или тестировать отдельно3. Компоненты имеют свой API4. API компонент более надёжен, чем

WebDriver API

Использование JavaScript API вместо WebDriver

Пример из жизни

Особенности пользовательского интерфейса:• Много фреймов• ActiveX

Изначальное решение

driver.findElement(By.id(“fancy-id”)).click();

Browser

WebDriver API

Проблемы

• Интерфейс сильно асинхронный, методы работали нестабильно

• Много фреймов (более пяти вложенных) – сложно перейти к нужному контролу

• Невозможность работы с ActiveX

Примеры

Получившийся результат

• Быстрый• Надёжный• Синхронный

Проблемы

Синхронные запросы и Alert’ы

• Вызов метода не заканчивается, пока не закрыт Alert

• Нельзя вызвать alert.accept(), так как предыдущий вызов еще не завершён

window.setTimeout

Отсутствие 100%-й эмуляции пользователя

Другие применения данной идеи

Процент сайтов с jQuery - 50-60%

Синхронизация

Преобразование jQuery-объектов в WebElement

и обратно

Поиск элементов

Получение родительского элемента

Упрощение взаимодействия со сложными элементами

Календарь Спасибо @barancev

«Самописные» элементы

«Самописные» элементы

Общая схема

Способ быстро обойти существующие проблемы в WebDriver’e

Делать обходные пути осознанно

• Делать только как временный workaround• Нужно разобраться, почему стандартный

метод не подходит

Итого• Погружение в технические детали реализации

позволяет делать более эффективные тесты• Изучение JavaScript и UI-библиотеки –

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

баланс

We are hiring! http://wargaming.com/ru/careers/

Игорь Хролhttp://ru.khroliz.comkhroliz@gmail.com / i_khrol@wargaming.net

Спасибо!Вопросы?

top related