Прискорюємо написання Selenium-автотестів на Ruby

Одним з інструментів, що дозволяють автоматизувати взаємодію з браузером, є Selenium Webdriver. Насправді автоматизовані тести веб-сторінок з використанням Selenium Webdriver виглядають досить громіздко. Ось «невеликий» приклад, який паралельно в двох браузерах відкриває сторінку пошуковика Google, заповнює пошуковий рядок і надсилає форму:



Як показала практика, при невеликих змінах у структурі сторінки найчастіше доводиться переробляти досить великий обсяг коду, що знову-таки спричиняє за собою великі витрати часу. Були зроблені спроби пошуку інструментів, що дозволяють зробити тести менш об'ємними і більш читабельними, але їх просто не виявилося. Було прийнято рішення розробити гем DSL (англ. Domain Specific Language, DSL — «предметно-специфічну мову»), який дозволив би створювати інтуїтивно зрозумілі тести, не містять нічого зайвого і їх можна було легко і швидко правити. Гем отримав назву SelWeT (Selenium Web Test).

При розробці використовувався мова Ruby 2.1.3 та геми selenium-webdriver, test-unit і shoulda-context. Для вибору елементів на сторінці було вирішено використовувати тільки селектори CSS, т. к. вони перекривають всі необхідні потреби (вибір групи або одного конкретного елемента на сторінці). Це якоюсь мірою спрощувало завдання.

Гем SelWeT дозволяє:
  • проводити тестування як в одному, так і декількох браузерах (виконується паралельно);
  • перевіряти наявність одного або групи елементів на сторінці;
  • взаємодіяти з елементами сторінки (клікнути на елементі, навести курсор на елемент, заповнити текстове поле, заповнити і відправити форму, вибрати значення select, перевірити стан checkbox і radio, переключитися на iframe, тощо);
  • взаємодіяти з браузером (перехід за посиланням, очищення кеша, зробити скріншот відкритої сторінки, посилання відкривається в новому вікні і т. д.).
Щоб виконувати тести, необхідно мати запущений на локальній чи віддаленій машині Selenium Server версії не нижче 2.44 із зазначенням необхідних драйверів (драйвера потрібні для IE, Chrome).

Приклад запуску Selenium Server з драйвером для Chrome на машині з Windows 7:

java-jar selenium-server-standalone-2.44.0.jar -Dwebdriver.chrome.driver = /path/to/chromedriver.exe

Звичайно ж, попередньо необхідно встановити необхідний браузер на дану машину.

Gemfile для машини, де буде здійснюватися запуск тестів:

gem 'selenium-webdriver', '~> 2.44.0'
gem 'test-unit', '~> 3.0.8'
gem 'shoulda-context', '~> 1.2.1'
gem 'selwet', '~> 0.0.2'


Приклад, що демонструє функціональність гема:

require 'selwet' # підключаємо гем

class SelWeT::Unit # для написання тестів використовується клас Unit

setBrowsers [:firefox, :chrome] # список браузерів, в яких буде проводитися тестировние
setSeleniumServerUrl 'http://127.0.0.1:4444/wd/hub' # адреса запущеного selenium server

context "Habr" do
should "1. Find habrahabr" do
# перейти по посиланню 'https://www.google.ru/'
Unit.followTheLink 'https://www.google.ru/'
#заповнюємо і відправляємо форму на сторінці пошуку
status, error = Unit.postForm 'form', {'[type="text"]'=>"habrahabr", 'button[name="btnG"]'=>:submit}
# перевіряємо, що при заповненні та відправці форми не виникло помилок
assert_equal true, status, error
end

should "2. Open harbahabr" do
# в новому вікні відкриваємо посилання на хабр
status, error = Unit.openInNewWindow '[href = "http://habrahabr.ua/"]'
# закриваємо вікно з пошукачем
Unit.closeWindow 0
# перевіряємо, що при виконанні не вознилкло помилок
assert_equal true, status, error
status, error = Unit.checkLocation 'http://habrahabr.ru/' # перевіряємо, що
assert_equal true, status, error # поточна сторінка http://habrahabr.ru/
end

should "3. Click on first article" do
# клікаєм на заголовок першої статті на хабре
status, error = Unit.click "div.post:first-child a.post_title"
# перевіряємо, що все пройшло успішно
assert_equal true, status, error
end

end

end

Як видно з прикладу, SelWeT дозволяє досить швидко накидати зрозумілий функціональний тест.

Для установки гема необхідно виконати

gem install selwet

Документація знаходиться у сховищі на GitHub.

SelWeT: https://github.com/inventos/selwet.git
Selenium wiki: https://code.google.com/p/selenium/wiki/Grid2
Shoulda-context: https://github.com/thoughtbot/shoulda-context
Test-unit: https://github.com/test-unit/test-unit

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.