Selenium webdriver - selenium - автоматизація веб-додатків
Примітка: Даний розділ не завершений. На даний момент розділ знаходиться в стадії написання. Ми впевнені в тому, що відомості, наведені тут, точні. Але ми будемо поступово доповнювати цей розділ. При цьому ми також будемо редагувати і рецензувати даний текст.
Можливості Selenium 2.0
Selenium 2.0 містить безліч чудових можливостей і поліпшень в порівнянні з Selenium 1. Найголовніша зміна нової версії - це інтеграція WebDriver API, альтернативного, спрощеного програмного інтерфейсу, який позбавлений недоліків, характерних для Selenium 1. Мета створення WebDriver API - розробити об'єктно-орієнтована API, що підтримує більшу кількість браузерів і краще вирішує проблеми тестування сучасних веб-додатків.
Примітка: Опис нових можливостей Selenium 2.0 буде додано пізніше. А поки ми відсилаємо Новомосковсктеля до офіційного анонсу в блозі.
Коли треба використовувати Selenium Server
Іншою причиною, чому вам може знадобитися Selenium Server, може бути використання Selenium Grid для розподіленого виконання тестів. І нарешті, він вам знадобиться, якщо ви використовуєте WebDriver поверх Selenium (реалізація WebDriver API, що використовує технологію Selenium 1 для взаємодії з браузером). Ці теми розглянуті докладніше далі в цій главі.
Створення проекту для розробки тестів з використанням WebDriver
Дії, необхідні для створення програмного проекту, що дозволяє розробляти тести з використанням Selenium, залежать від того, якою мовою програмування і за допомогою яких середовищ розробки ви збираєтеся це робити.
Найпростіший спосіб для цієї мови програмування - використовувати Maven для створення проекту. Maven автоматично завантажить клієнтську бібліотеку Selenium 2.0 для мови Java разом з усіма залежностями і створить проект, використовуючи файл pom.xml (конфігураційний файл проекту). Після того, як ви це зробили, ви можете імпортувати проект в бажану вами середовище розробки (IDE) - IntelliJ IDEA або Eclipse.
Переконайтеся в тому, вказана остання версія Selenium. На момент написання зазначена в прикладі версія є останньою, однак нові релізи Selenium 2.0 виходять часто. Порівняйте з інформацією, наведеною на веб-сторінці. де вказані налаштування Maven для поточної версії Selenium, і відповідним чином змініть залежність (
Тепер в командному рядку перейдіть (cd) в директорію вашого проекту і запустіть Maven наступним чином:
Ця команда завантажить Selenium і все залежності, а також додасть їх в ваш проект.
Нарешті, імпортуйте створений проект в в бажану вами середовище розробки. Для тих, хто робить це вперше, ми написали інструкцію.
Якщо ви використовуєте Windows Vista або новішу, вам спочатку слід розблокувати zip-архів: клацніть правою кнопкою миші на архіві, виберіть "Властивості", потім "Розблокувати" і натисніть "ОК".
Вийміть вміст архіву і додайте посилання на розархівовані DLL-бібліотеки в ваш проект в Visual Studo або в будь-який інший використовуваної вами IDE.
Selenium також поширюється у вигляді набору пакетів NuGet:
Якщо ви використовуєте Python для автоматизації тестування, значить, найімовірніше, ви вже знайомі з тим, як відбувається розробка додатків на ньому. Для додавання Selenium до вашого оточення мови Python виконайте наступну команду в командному рядку:
Навчання мови Python виходить за рамки даного керівництва. На щастя, існує безліч спеціалізованих ресурсів, та й ваші програмісти можуть вам допомогти в цій справі.
Якщо ви використовуєте Ruby для автоматизації тестування, значить, найімовірніше, ви вже знайомі з цією мовою програмування. Для додавання Selenium до вашого оточення мови Ruby виконайте наступну команду в інтерфейсі командного рядка:
Навчання мови Ruby виходить за рамки даного керівництва, проте існує безліч джерел інформації про Ruby і, ймовірно, вам зможуть допомогти працюють з вами розробники.
В даний час Selenium 2.0 не підтримує Perl. Якщо у вас є питання або ви хочете запропонувати допомогу в розробці підтримки даного мови, будь ласка, напишіть нашим розробникам.
В даний час Selenium 2.0 не підтримує PHP. Якщо у вас є питання або ви хочете запропонувати допомогу в розробці підтримки даного мови, будь ласка, напишіть нашим розробникам.
Перехід з Selenium 1.0
Для тих, у кого вже є набори тестів, написаних з використанням Selenium 1.0, ми пропонуємо ряд рекомендацій по тому, як перенести існуючий код на Selenium 2.0. Саймон Стюарт (Simon Stewart), провідний розробник Selenium 2.0, написав статтю з цього приводу, яку ви можете знайти в додатку "Міграція з Selenium RC на WebDriver".
Початок роботи з Selenium WebDriver
WebDriver - це інструмент для автоматизованого тестування веб-додатків, зокрема, для перевірки того, що додаток працює відповідно до очікувань. Цей інструмент замислювався таким чином, щоб мати зручний програмний інтерфейс (API), що дозволяє підвищити Новомосковскемость і спростити підтримку тестів, більш легкий для вивчення і розуміння, ніж Selenium RC (1.0) API. WebDriver API не прив'язаний ні до яких тестовим фреймворками, що дозволяє використовувати будь-які фреймворки модульного тестування, так само як і старий добрий метод "main".
У цьому розділі подано ознайомитися з азами WebDriver API і зробити перші кроки в його використанні. Почніть з створення WebDriver-проекту, якщо ви цього ще не зробили, як описано в попередньому розділі, Створення проекту для розробки тестів з використанням WebDriver.
Коли ви створите проект, ви побачите, що WebDriver поводиться як звичайна бібліотека: він повністю самодостатній і, як правило, вам не потрібно пам'ятати про необхідність запуску додаткових процесів або запуску інсталяторів перед його використанням, на відміну від проксі-сервера Selenium RC.
Тепер ви готові почати писати код. Подивіться наступний приклад, який запускає пошук слова "Cheese" в Google і потім друкує заголовок результуючої сторінки в консоль.
Ця таблиця знаходиться в стані розробки
Для більшої "відчувається надійності" ви можете вибрати інший драйвер, такий як Firefox Driver. Його перевага в тому, що він насправді відображає веб-сторінку в цьому браузері, і, як наслідок, це дає можливість визначити, наприклад, позицію елемента на сторінці або застосовуються до нього властивості CSS. Однак ці можливості мають свою ціну - швидкість виконання тестів сильно зменшується. Коли ви розробляєте тести з використанням WebDriver у вас є можливість вибрати найбільш підходящий драйвер для кожного конкретного тесту.
Давайте почнемо з найпростішого драйвера HtmlUnit Driver:
Команди операції
відкриття сторінок
Перша річ, яку ви ймовірно захочете зробити за допомогою WebDriver - відкрити веб-сторінку. Для цього зазвичай використовують метод "get":
WebDriver буде чекати повного завантаження сторінки (тобто моменту, коли спрацює подія "onload"), перед тим як повернути управління назад в ваш тестовий сценарій. Але даний підхід може не спрацювати в разі, якщо сторінка виконує безліч AJAX запитів відразу після завантаження (тобто за тим же події "onload"). У цьому випадку щоб дочекатися повного завантаження сторінки ви можете скористатися явними і неявними очікуваннями.
Взаємодія зі сторінкою
Можливість тільки потрапити на потрібну сторінку сама по собі не дуже цінна. На передньому плані має можливість взаємодії зі сторінкою, а точніше, з HTML-елементами цієї сторінки. Перш за все, потрібно знайти Вас елемент. WebDriver надає кілька спосіб пошуку елементів. Наприклад, якщо у вас є елемент, визначений в HTML коді наступним чином:
то можна знайти його будь-яким з наведених нижче способів:
Додатково до цього, ви можете знаходити посилання на їхню тексту. Але будьте уважні! Текст посилання повинен бути точним збігом! Також, будьте уважні при використанні XPath в WebDriver. У разі, якщо критеріям пошуку задовольняє кілька елементів, результатом виконання "findElement" буде перший з них. Якщо ж нічого знайти не вдалося, буде видано виняток "NoSuchElementException".
WebDriver володіє об'єктно-орієнтованим API, всі типи елементів сторінки представлені єдиним інтерфейсом WebElement. Це означає, що незважаючи на те, що функція автозаповнення в IDE показує вам безліч можливих методів, не всі вони матимуть сенс або можуть бути застосовані до конкретного знайденому елементу. Не хвилюйтеся! Якщо ви викличете метод, який не має сенсу (наприклад, setSelected () для елемента "meta"), це призведе до появи виключення.
Отже, ви знайшли елемент сторінки, що далі? По-перше, ви можете побажати ввести який-небудь текст в поле введення:
Ви можете імітувати натискання стрілок на клавіатурі використовуючи клас "Keys":
Можна викликати метод "sendKeys" для будь-якого елемента, що дає можливість тестувати "гарячі клавіші", на кшталт тих, що є в GMail. Це дає наступний побічний ефект: коли ви щось вводите в текстове поле, воно не буде очищено автоматично. Інакше кажучи, те, що ви вводите, буде додано до вже наявного тексту. Однак ви легко можете очистити текстове поле (як однорядкове "input type = 'text'", так і многострочное "textarea"):
Ідентифікація елементів сторінки
Примітка: даний розділ потребує доопрацювання.
Ідентифікація елементів в WebDriver відбувається за допомогою класу "By". Цей клас реалізує всі використовувані методи пошуку.
Використання XPath виразів
WebDriver використовує вбудовані можливості браузерів всюди, де це можливо. Для тих браузерів, в яких вбудована підтримка XPath відсутня, ми зробили власну реалізацію. Все це може призводити до несподіваних результатів в деяких випадках, якщо ви не знаєте про відмінності в поведінці, властивих різним реалізаціям XPath.
Ім'я атрибута або тега
Іноді HTML елементи не потребують явній вказівці атрибутів в коді через те, що вони мають якесь стандартне значення за замовчуванням. Наприклад: елемент "input" не потребує атрибуті "type", тому що цей атрибут має значення за замовчуванням "text". У такій ситуації на практиці ви НЕ повинні очікувати, що XPath-запит виявить такий неявний атрибут.
Введення даних - Заповнення полів форми
Ми вже познайомилися з тим, як вводити дані в текстові поля, але як бути з іншими елементами? Ви можете використовувати метод click для перемикання стану чекбоксів або вибору потрібного значення (тег "option") зі списку (тег "select"). Робота зі списками не так вже й складна:
Цей фрагмент коду знайде перший елемент "select" на сторінці і в циклі перебере всі варіанти вибору ( "option"), виводячи з кожної итерацией значення поточного варіанту, а також позначаючи його обраним. Втім, ви напевно помітили, що це не найзручніший спосіб роботи з елементом "select". Серед допоміжних класів WebDriver існує спеціальний клас "Select", що надає зручні для роботи з такими елементами методи.
Наведений код знайде перший елемент "select" на сторінці, скасує поточний вибір (deselect all), а потім вибере елемент з текстом "Едам".
Після того, як ви заповните поля форми, ви, ймовірно, захочете відправити її. Один із способів зробити це - знайти і натиснути кнопку відправки.
Крім того, WebDriver дозволяє викликати метод "submit" для довільного елемента. Якщо він викликаний для елемента, який знаходиться в деякій формі, WebDriver буде рухатися вгору по DOM до тих пір, поки не знайде форму, що включає його в себе, і потім викличе для неї "submit". Якщо елемент знаходиться не всередині форми, то буде видано виняток "NoSuchElementException".
Перемикання між вікнами і фреймами
Деякі веб-додатки мають кілька вікон або фреймів. WebDriver здатний переключатися між ними за допомогою методу "switchTo":
Також ви можете передати методу "switchTo (). Window ()" дескриптор вікна. Так, описаним нижче способом, ви можете обійти всі вікна:
Також ви можете перемикатися в потрібні фрейми (або плаваючі фрейми):
Для доступу до вкладених фреймів використовуйте складене ім'я з точною як роздільник, або індекс дочірнього фрейма. Подивіться наступний приклад:
Цей код приведе вас у фрейм з ім'ям "child", що знаходиться всередині першого фрейма (індекс 0), вкладеного у фрейм з ім'ям "frameName". Нумерація фреймів йде * з верхнього *.
Спливаючі діалогові вікна
Починаючи з 2.0 beta 1, Selenium розпорядженні вбудованими засобами для роботи з діалоговими вікнами. Після виконання будь-якого дії, що приводить до появи діалогу на екрані, ви можете отримати до нього доступ в такий спосіб:
Цей код поверне об'єкт, відповідний модальному діалогу, відкритого на екрані в даний момент. За допомогою цього об'єкта ви можете вчинити дії "прийняття", "відмови", отримати вміст вікна або навіть написати що-небудь в поле введення діалогу. Інтерфейс Alert однаково добре працює для діалогів alert, confirm і prompt. Для отримання додаткової інформації ознайомтеся з JavaDocs.
Навігація по історії браузера
Ще раз: "" navigate (). To () "" і "" get () "" роблять абсолютно один і той же. Просто другий коротше писати.
Інтерфейс навігації ( "navigate") має змогу переміщатися вперед і назад по історії браузера:
Врахуйте, що дана функціональність повністю покладається на її реалізацію браузером. Якщо ви звикли до певної поведінки одного браузера, є ймовірність того, що в іншому може станеться щось вами не очікуване.