2. Структура доклада
● Доклад:
– Что такое Selenium
– Примеры тестов
– Использование Selenium в Continious Integration
проекта Geo2Tag
●
Скачать примеры http://bit.ly/1T36po8
● Примеры подготовлены для
– Ubuntu 14.04
– Python 2.7
– Selenium 2.45
3. Что такое Selenium
● Selenium WebDriver
– инструмент для
автоматизации
тестирования веб-
приложения в
браузере.
● Поставляется в виде
библиотеки.
● Единый подход к
разным браузерам.
5. Возможности Selenium
● протестировать js логику
● протестировать пользовательский веб-
интерфейс (в том числе и css)
● автоматизировать действия на сложных
вебстраницах
6. Пример: Когда нужен Selenium
● Есть социальная сеть, которую активно
разрабатывает большая команда,
● Хочется быть уверенным, что основные юзкейсы
не сломались перед очередным релизом:
– Авторизация
– Просмотр сообщений
– Отправка сообщений
– Выход из системы
● Решение – Selenium скрипт для
воспроизведения каждого юзкейса.
7. Пример: Когда нужен Selenium 2
● Вконтакте есть закладки (<3), но нет поиска
по ним.
● В закладках может накопиться очень много
полезных записей.
● Чтобы найти старые записи, нужно
пролистать страницу очень много раз вниз.
● Решение:
– Selenium приложение, которое скролит закладки
до дна и индексирует содержимое (ссылка на
контент, аннотация, дата)
8. Реализации Selenium
● Поддержка языков
– Официально: Java, C#, Ruby, Python,
NodeJS
– Неофициально: Php, Perl, Objective C,
Haskell ….
● Поддержка браузеров
– Chrome, Opera, Firefox, Safari, Android, Ios,
Windows Phone, BlackBerry
9. Основные интерфейсы
● Поиск элементов: xpath, css, id, tag, name,
link content, class
● Установка задержек: явные и неявные
● Выполнение действий со страницей:
– Произвольный js код
– Пользовательский ввод
– Переходы на другие страницы/назад и вперед по
истории
– Взаимодействие с диалогами
– Drag n Drop
10. Базовая последовательность
работы с Selenium
1.Создаем объект webdriver
2.Открываем веб-страницу
3.Устанавливаем величину задержки
ожидания действий веб-страницы
4.Ищем элементы
5.Выполняем действия над элементами
6.Проверяем результаты действий через
Assert
11. example1.py
● Ищем слово Selenium в Ya.ru
● Последовательность:
– Запускаем браузер
– Ищем поле ввода с атрибутом name='text'
– Вводим 'Selenium'
– Вводим 'n'
12. example1.py - анализ
● driver.implicitly_wait() устанавливает
максимальное время в секундах, которое
Selenium будет ждать, пока не появится
искомый для find_element_by_* элемент.
● driver.close() - закрывает браузер
● Появляющееся окно браузера не находится
в режиме инкогнито
13. example2.py
● Интегрируемся с python unittest – помещаем
логику тестирования в класс-наследник
TestCase
● Добавляем проверки через TestCase.assert*
● Получаем отформатированный вывод
результатов теста в консоль + индикацию о
успешности тестов в кодах возврата скрипта.
14. Js unittests + selenium
● Проблема – есть много js бизнес-логики и ее
хочется автоматизированно юнит-
тестировать
● Решение:
– Создаем веб-страницу /js-tests с js-юниттестами
– Настраиваем все так, чтобы js тесты
выполнялись сами при обновлении страницы
– В selenium тесте открываем /js-tests и проверяем,
что содержимое страницы соответствует
успешному прохождению js тестов
15. QUnit
● Позволяет проводить юнит тестирование
любой сложности для js
● В том числе – для асинхронных методов
● Представляет результаты в удобном для
анализа виде (статистика по каждому тесту
+ время выполнения)
● Запускает тесты сразу после открытия
страницы
16. Example3.html
● Что мы видим на
странице
● Как организованы
тесты
● В каких элементах
разметки можно
узнать:
– Что тесты закончили
выполнение
– Сколько тестов
упало
17. example3.py( QUnit + Selenium)
● Открываем
страницу
example3.html
● Проверяем что
она:
– Все тесты
завершили
работу
– Показывает,
что все тесты
пройдены
18. Автоматизация тестирования
через Selenium - наблюдения
● Отдельный скрипт для запуска тестирования с
указанием имени сайта, который проверяем
● Каждый раз открывать браузер – долго!
● Параметризация тестов – надо заложить сразу
– Помогает не привязатся намертво к
конкретному серверу и делает набор тестов
отличным инструментом проверки
– Правильный базовый класс
19. Очистка кэша браузера при
тестировании
● Проблема: Selenium не имеет стандартного
интерфейса для очистки кэша браузера
● Варианты:
– Очищать вручную
– Каждый раз использовать чистую среду
(изолировать тесты)
– Использовать инвалидацию кэша на стороне
веб-приложения
20. Geo2Tag
● Open Source платформа для сервисов,
использующих данные о местоположении
● Веб-интерфейсы для администрирования
● REST API
21. Как Selenium используется в
Geo2Tag
● Для каждого коммита в репозиторий
запускаются проверки (unittest, integration tests,
Selenium)
● Все проверки проходят последовательно
● Проверка происходит в изолированной
виртуальной машине
● В качестве способа проверки для большой
части Frontend-задач выступает
Selenium/QunitJs тест
23. Как Selenium используется в
Geo2Tag - технологии
● ОC – Ubuntu 14.04 без графической
подсистемы
● Изоляция сборок друг от друга – Docker
● Непрерывная интеграция – Jenkins
● Виртуальный Х-сервер xvfb
24. Ссылки
● Что такое Selenium
– http://docs.seleniumhq.org/projects/webdriver/
– http://habrahabr.ru/post/152653/
● Python Selenium
http://selenium-python.readthedocs.org/
● CSS тестирование
http://habrahabr.ru/post/190358/
● QunitJs https://qunitjs.com/
● Geo2Tag https://github.com/geo2tag/geo2tag
●
Примеры к докладу http://bit.ly/1T36po8