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

38
Повышаем надёжность тестов через JavaScript Игорь Хрол http://www.khroliz.com

Upload: igor-khrol

Post on 16-Nov-2014

8.884 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо, Dmitriy Kovalenko

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

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

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

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

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

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

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

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

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

WebDriver API

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

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

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

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

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

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

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

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

Browser

WebDriver API

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

Проблемы

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

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

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

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

Примеры

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

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

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

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

Проблемы

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

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

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

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

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

window.setTimeout

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

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

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

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

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

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

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

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

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

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

и обратно

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

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

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

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

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

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

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

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

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

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

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

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

Общая схема

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

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

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

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

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

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

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

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

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

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

баланс

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

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

Игорь Хролhttp://[email protected] / [email protected]

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