Webdriver характеристика основних команд - база знань

У цій статті я хочу
привести опис і приклади основних (на мій погляд) команд в Selenium
2.0 WebDriver для автоматизації функціонального тестування
web-додатків. У цій статті я розповідав, що собою являє WebDriver. А в даній
замітці можна подивитися приклад найпростішого тестового сценарію на
WebDriver і основну ввідну інформацію про даний інструмент
автоматизованого тестування. Приклади будуть представлені на C #
Driver, версія бібліотек - 2.9.0.

У новій версії Selenium організований покращений механізм пошуку елементів
сторінки. Перед зверненням до елементу сторінку необхідно спершу
викликати метод пошуку із зазначенням типу локатора. Також є метод для
пошуку групи елементів findElements (By by).
У WebDriver доступна робота з наступними типами локаторів: id, name,
xpath, tagName, className, cssSelector, linkText, partionalLinkText.
Приклад ініціалізації і пошуку елемента з використанням різних типів
локаторів:

Як і в Selenium 1.0. в Selenium WebDriver можна виділити три типи основних команд:


  • Дії - функціональне дію над елементами веб-сторінки або
    браузером. Наприклад, заповнення полів, натискання на кнопку і інші;
  • Перевірки - виконання перевірок на тестованої сторінці. наприклад,
    перевірка того, що певне поле форми має вказане значення, або
    перевірка заголовка вікна і т.д .;
  • Очікування - організація очікування настання певних подій на
    сторінці або зі сторінкою (наприклад, очікування завантаження сторінки або
    очікування завантаження ajax запитів, поява на сторінці певного
    елемента і т.д.).

Команди навігації. За навігацію відповідає клас Navigate.

Робота з вікнами браузера:

  • void Close () - закрити поточне вікно. Закриває браузер, якщо немає більше відкритих вікон;
  • void Dispose () - Member of System.IDisposable. За допомогою даного методу можна видаляти, звільняти чи скидати некеровані ресурси;
  • Manage () - дозволяє змінювати налаштування драйвера;
  • void Quit () вихід з драйвера, закриття всіх вікон пов'язаних з ним;
  • OpenQA.Selenium.IWebElement FindElement (OpenQA.Selenium.By by)
    - пошук елемента на сторінці. Параметр By вказує на механізм пошуку
    елемента. Повертає перший знайдений елемент, що задовольняє, умові
    пошуку. Приклади представлені вище;
  • System.Collections.ObjectModel.ReadOnlyCollection FindElements (OpenQA.Selenium.By by) - те ж саме, що і FindElement, тільки повертає всі елементи, що задовольняють умові пошуку;
  • OpenQA.Selenium.ITargetLocator SwitchTo () - перемикання між popup- ми, АЛЕРТ, віконцями;
  • string PageSource - повертає вміст останньої завантаженої сторінки;
  • string Title - повертає Title поточної сторінки;
  • string Url - встановлює або повертає Url поточного вікна;
  • string CurrentWindowHandle - повертає посилання на поточне вікно;
  • System.Collections.ObjectModel.ReadOnlyCollection WindowHandles - повертає посилання на всі відкриті вікна браузера.

Доступ до даних командам здійснюється через інтерфейс IWebDriver. Нижче прості приклади:

Перевіряємо Title поточної сторінки:

Перевіряємо, чи є на поточній сторінці текст "Результати пошуку":

Приклади роботи з popup- ми, Алерт. Для перемикання між вікнами, popup- ми, АЛЕРТ потрібно використовувати метод SwitchTo (). Для роботи з АЛЕРТ призначений клас IAlert.

Вибираємо фрейм по імені:

Вибираємо вікно на ім'я:

Дії над елементами сторінки:


  • void Click () - одиночне натискання по елементу;
  • string GetAttribute (string attributeName) - повертає значення атрибута;
  • string GetCssValue (string propertyName) - повертає значення властивості CSS елемента;
  • void SendKeys (string text)
    - введення тексту в текстові поля. При роботі з текстовими полями можна
    використовувати функціональні клавіші, їх роботу забезпечує клас Keys. Наприклад: element.SendKeys ( "sds" + Keys.Up);
  • void Submit () - відправка форми на сервер;
  • bool Displayed - повертає значення, яке вказує на те, чи є елемент видимим;
  • bool Enabled - повертає значення, яке вказує на те, чи є елемент активним;
  • System.Drawing.Point Location - повертає координати елемента;
  • bool Selected - повертає значення, чи є даний елемент (checkboxes, radio buttons) обраним;
  • string TagName - повертає ім'я тега елемента;
  • string Text - повертає innerText елемента (без пробілів);
  • System.Drawing.Size Size - вовращает розміри елемента;
  • void Clear () - очищення вмісту текстового елемента.

Випадають списки. Елементи множинного вибору. У WebDriver є спеціальний клас SelectElement.
який призначений для спрощення роботи з HTML select елементами. для
того, щоб скористатися всіма принадами даного класу потрібно
підключити простір імен OpenQA.Selenium.Support.UI. Даний клас сожержіт наступні методи:


  • public void DeselectAll () - очистити всі записи. Використовувати тільки для елементів множинного вибору (multiple selections);
  • public void DeselectByIndex (int index) - деактивувати опцію, використовуючи індекс елемента;
  • public void DeselectByText (string text) - деактивувати опцію, використовуючи видимий текст елемента;
  • public void DeselectByValue (string value) - деактивувати опцію, за значенням елемента;
  • public void SelectByIndex (int index) - активувати опцію, використовуючи індекс елемента;
  • public void SelectByText (string text) - активувати опцію, використовуючи видимий текст елемента;
  • public void SelectByValue (string value) - активувати опцію, за значенням елемента;
  • public System.Collections.Generic.IList AllSelectedOptions - повертає всі вибрані опції в межах поточного елемента;
  • public bool IsMultiple - повертає значення, чи є даний елемент множинного вибору;
  • public System.Collections.Generic.IList Options - повертає список опцій для обраного елемента;
  • public OpenQA.Selenium.IWebElement SelectedOption - повертає значення поточного елемента.

Як приклад для
multiple елемента деактивувавши всі вибрані значення, потім активуємо,
використовуючи різні команди. Використовуючи команду submit відправляємо дані на сервер.

Приклад роботи з Drag And Drop. Drag And Drop команди на даний момент поки працюють тільки для Windows платформи.

клас Actions
предосталвяет додаткові механізми взаємодії з браузером
(MouseClick, MouseClicksAndHold, ContextClick, DoubleClick,
DragAndDropToOffset і інші).

Трохи про очікування:

WebDriver спрямований в
першу чергу на роботу зі складним, перевантаженими AJAX запитами
веб-інтерфейсами. Розробники пропонують два механізму очікування
(Explicit Waits, Implicit Waits). Explicit Waits (експліцитно
очікування), з використанням класу WebDriverWait, - являє собою
фактично циклічне очікування події.

Implicit Waits (імпліцитне очікування) - все команди пошуку елементів автоматично стають очікували.

Природно, можна використовувати свої методи очікування. Нижче приклад методу
WaitForTextPresent (). Уникайте використання Thread.sleep ().

Selenium WebDriver вміє запускати тести на віддаленій машині. Для віддаленого запуску потрібно використовувати клас RemoteWebDriver.

Додаємо його в простір імен.

Ось простий приклад використання клас RemoteWebDriver для запуску тестів на віддаленій машині:

Для браузера Firefox
передбачена робота з профайлам браузера. Для цього потрібно колупати
клас FirefoxProfile і FirefoxProfileManager.

У WebDriver є можливість створення скріншотів:

Приклад створення скріншота з використанням RemoteWebDriver:

Про режим сумісності з Selenium RC WebDriverBackedSelenium я писав в цій замітці.

Потрібно відзначити, що в WebDriver реалізована можливість використання шаблонів PageObject і PageFactory.
Суть даних шаблонів полягає в тому, щоб найпростіші операції
виділити в окремі логічні блоки, тобто абстрагувати до рівня
дій на певній сторінці. Наприклад, у нас є сторінка Login.
Насамперед ми створимо окремий клас Login в якому опишемо всі
елементи сторінки і методи їх пошуку. Далі для даного класу виділимо
все необходімими методи (дії на сторінці) використовуючи вже раніше
описані елементи сторінки. Після чого реалізовані методи можна буде
використовувати на більш високому рівні бізнес логіки. даний підхід
дозволяє значно знизити витрати на розробку і особливо на
підтримку тестового фреймворка. А також зробить ваші тести більш гнучкими
і реюзаемимі. Для використання усіх принад описаних вище шаблонів в
реалізації WebDriver не забудьте підключити простір імен OpenQA.Selenium.Support.PageObjects. Найпростіший приклад реалізації шаблону PageObject:

Описуємо елементи сторінки Login:

Опис методу LoginAsAdministrator:

Деякі приклади були запозичені з офіційної документації
проекту. Я постарався привести, як мені здається, всі основні команди в
Selenium WebDriver. Наведені приклади демонструють лише мінімальні
можливості інструменту, але достатні для успішного початку роботи з
ним. Успіхів!

Поправте будь ласка:
bool Displayed - повертає значення, яке вказує на те, чи є елемент видимим;
bool Enabled - повертає значення, яке вказує на те, чи є елемент не активним;