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

18,864 views

Published on

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

Published in: Technology
3 Comments
6 Likes
Statistics
Notes
No Downloads
Views
Total views
18,864
On SlideShare
0
From Embeds
0
Number of Embeds
16,706
Actions
Shares
0
Downloads
20
Comments
3
Likes
6
Embeds 0
No embeds

No notes for slide

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

  1. 1. Повышаем надёжность тестов через JavaScript Игорь Хрол http://www.khroliz.com
  2. 2. О себе • Игорь Хрол • QA Automation Team Lead в Wargaming • Более семи лет в автоматизации тестирования • Десятки проектов • Инженер, тренер, консультант, менеджер, докладчик • Опыт работы с Selenium’ом – более 5 лет • Мой блог: http://ru.khroliz.com Постоянный участник SeleniumCamp 
  3. 3. О чём говорим? • Теоретические рассуждения и общие размышления • Практическая применимость идеи
  4. 4. Зависимость между уровнем тестов и поддержкой
  5. 5. UI-тесты ненадёжны
  6. 6. UI-тесты ненадёжны Одна из причин - современные пользовательские интерфейсы: – Сложные – Асинхронные
  7. 7. Современные интерфейсы строятся на уже готовых компонентах
  8. 8. Современные интерфейсы строятся на уже готовых компонентах
  9. 9. Готовые компоненты можно меньше тестировать
  10. 10. Кастомные компоненты можно тестировать отдельно http://seleniumcamp.com/archive/selenium-camp-2013/materials/unit-testing/ Спасибо, Dmitriy Kovalenko
  11. 11. Большинство современных UI имеет внутренний API
  12. 12. Преимущества API • Заточен для взаимодействия с контролами • Синхронный (или есть методы для синхронизации)
  13. 13. 1. UI на готовых компонентах 2. Готовые компоненты можно не тестировать или тестировать отдельно 3. Компоненты имеют свой API 4. API компонент более надёжен, чем WebDriver API Использование JavaScript API вместо WebDriver
  14. 14. Пример из жизни
  15. 15. Особенности пользовательского интерфейса: • Много фреймов • ActiveX
  16. 16. Изначальное решение driver.findElement(By.id(“fancy-id”)).click(); WebDriver API Browser
  17. 17. Проблемы • Интерфейс сильно асинхронный, методы работали нестабильно • Много фреймов (более пяти вложенных) – сложно перейти к нужному контролу • Невозможность работы с ActiveX
  18. 18. Browser Script API http://docs.oracle.com/cd/B40099_02/books/OI Ref/OIRefBrowseScript.html Browser Script HTTP Server Script
  19. 19. Примеры
  20. 20. Получившийся результат • Быстрый • Надёжный • Синхронный
  21. 21. Проблемы
  22. 22. Синхронные запросы и Alert’ы • Вызов метода не заканчивается, пока не закрыт Alert • Нельзя вызвать alert.accept(), так как предыдущий вызов еще не завершён
  23. 23. window.setTimeout
  24. 24. Отсутствие 100%-й эмуляции пользователя
  25. 25. Другие применения данной идеи
  26. 26. Процент сайтов с jQuery - 50-60%
  27. 27. Синхронизация
  28. 28. Преобразование jQuery-объектов в WebElement и обратно
  29. 29. Поиск элементов
  30. 30. Получение родительского элемента
  31. 31. Упрощение взаимодействия со сложными элементами Календарь Спасибо @barancev
  32. 32. «Самописные» элементы
  33. 33. «Самописные» элементы
  34. 34. Общая схема
  35. 35. Способ быстро обойти существующие проблемы в WebDriver’e
  36. 36. Делать обходные пути осознанно • Делать только как временный workaround • Нужно разобраться, почему стандартный метод не подходит
  37. 37. Итого • Погружение в технические детали реализации позволяет делать более эффективные тесты • Изучение JavaScript и UI-библиотеки – логичный шаг для UI-автоматизации • Но нужно понимать, чем жертвуем и искать баланс
  38. 38. Спасибо! Вопросы? Игорь Хрол http://ru.khroliz.com khroliz@gmail.com / i_khrol@wargaming.net We are hiring!  http://wargaming.com/ru/careers/

×