Робота з Webdriver (ч.5, використання драйверів)

Драйвери Selenium-WebDriver

WebDriver це назва основного інтерфейсу, на якому повинні бути написані тести, але є кілька реалізацій. До них відносяться:


HtmlUnit Driver
В даний час це найшвидшаі найлегша реалізація WebDriver. Як випливає з назви, він заснований на HtmlUnit. HtmlUnit реалізація WebBrowser на основі Java без графічного інтерфейсу. Для зв’язування будь-якої мови (крім Java) Selenium Server потребує використовувати цей драйвер.

Використання:

WebDriver driver = new HtmlUnitDriver();
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
                                        DesiredCapabilities.HtmlUnit());
driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNIT.copy())
driver = Selenium::WebDriver.for :remote, :url => "http://localhost:4444/wd/hub", :desired_capabilities => :htmlunit

Плюси:
Найшвидша реалізація WebDriver
Написаний на чистій Java, і тому не залежить від платформи
Підтримка JavaScript
Мінуси:
Емуляція поведінки JavaScript інших браузерів (див. нижче)

JavaScript в HtmlUnit Driver
Жоден з популярних браузерів не використовує такий двигун JavaScript, що використовується в HtmlUnit (Rhino). Якщо ви тестуєте JavaScript використовуючи HtmlUnit результати можуть істотно відрізнятися від інших браузерів.

Коли ми говоримо “JavaScript” ми маємо на увазі “JavaScript і DOM”. Хоча DOM визначається W3C, кожен браузер має свої власні примхи і відмінності в реалізації DOM і в тому, як JavaScript взаємодіє з ним. HtmlUnit має вражаюче повну реалізацію DOM і має хорошу підтримку для використання JavaScript, але він нічим не відрізняється від будь-якого іншого браузера: він також має свої тонкощі і відмінності як від стандарту W3C і DOM реалізацій в основних браузерах, незважаючи на його здатність наслідувати інші браузери.

З WebDriver, ми повинні зробити вибір: ми робимо підтримку JavaScript HtmlUnit-ом і ризкуємо зіштовкнутися з проблемами, які проявляються в певних місцях, або ми вимикаємо JavaScript, знаючи, що все більше і більше сайтів працюють, використовуючи JavaScript? HtmlUnit використовує консервативний підхід, і за замовчуванням відключає підтримку JavaScript, коли використовує HtmlUnit. З кожним релізом як WebDriver, так і HtmlUnit, переглядається це рішення: HtmlUnit сподівається включити JavaScript за замовчуванням в якийсь момент.

Включення JavaScript
Якщо ви не можете чекати, включити підтримку JavaScript дуже просто:

HtmlUnitDriver driver = new HtmlUnitDriver(true);
WebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
                       DesiredCapabilities.HtmlUnitWithJavaScript());
driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.HTMLUNITWITHJS)
caps = Selenium::WebDriver::Remote::Capabilities.htmlunit(:javascript_enabled => true)
driver = Selenium::WebDriver.for :remote, :url => "http://localhost:4444/wd/hub", :desired_capabilities => caps

Це спричинить емуляцію Firefox 3.6 в обробці JavaScript за замовчуванням в HtmlUnit Driver.


Драйвер Firefox

Драйвер управляє браузером Firefox за допомогою плагіна Firefox. Профіль Firefox, який використовується урізаний на відміну від того, що встановлений на комп’ютері, щоб включити тільки плагін Selenium WebDriver.xpi. Драйвер може встановлюватися і тестуватися на Windows, Mac та Linux.

WebDriver driver = new FirefoxDriver();
IWebDriver driver = new FirefoxDriver();
driver = webdriver.Firefox()
driver = Selenium::WebDriver.for :firefox

Плюси:
Працює в реальному браузері і підтримує JavaScript
Швидше, ніж драйвер Internet Explorer
Мінуси:
Повільніше, ніж драйвер HtmlUnit

Інформація
Дивіться розділ Firefox для найбільш актуальної інформації.


Драйвер Internet Explorer
Цей драйвер управляється .dll, таким чином доступний тільки на ОС Windows.

WebDriver driver = new InternetExplorerDriver();
IWebDriver driver = new InternetExlorerDriver();
driver = webdriver.Ie()
driver = Selenium::WebDriver.for :ie

Плюси:
Працює в реальному браузері і підтримує технологію JavaScript, так як бачать кінцеві користувачі.
Мінуси:
Очевидно, драйвер Internet Explorer буде працювати тільки на Windows
Порівняно повільно
XPath спочатку не підтримувався в більшості версій.
CSS спочатку не підтримувався у версіях 6 і 7.
CSS селектори в IE 8 і 9 є за замовчуванням, але ці браузери не повністю підтримують CSS3

Інформація
Дивіться розділ Internet Explorer для найбільш актуальної інформації.


Драйвер Chrome
Драйвер Chrome впроваджується і підтримується розробниками проекту Chromium. WebDriver працює з Chrome через двійковій код драйвера Chrome (знаходиться на сторінці завантаження проекту chromium). Ви повинні мати як драйвер Chrome і встановлений браузер Chrome. Драйвер Chrome повинен бути розміщений десь на вашій системі для того, щоб WebDriver автоматичного виявив його. Сам браузер Chrome виявляє драйвер Chrome за шляхом установки за замовчуванням. Вони обидва можуть бути змінені.

WebDriver driver = new ChromeDriver();
IWebDriver driver = new ChromeDriver();
driver = webdriver.Chrome()
driver = Selenium::WebDriver.for :chrome

Плюси:
Працює в реальному браузері і підтримує технологію JavaScript
Оскільки Chrome є Webkit-браузером, драйвер Chrome може дозволити вам переконатися, що ваш сайт працює в Safari. Однак, з того часу, як Chrome почав використовувати власний V8 JavaScript, а не Nitro двигун Safari, виконання JavaScript може відрізнятися.
Мінуси:
Повільніше, ніж драйверHtmlUnit

Інформація
Дивіться розділ Chrome для найбільш актуальної інформації.


Додаткові Ресурси
Ви можете знайти додаткові ресурси для роботи з WebDriver в вікіпедії WebDriver .

We #StandWithUkraine.
Learn how you can help too!

#Stand­With­Ukraine

We don't know how long the war will last. But what we do know is that we can't stand aside and watch.

The fastest way you can help too is to support Ukraine financially. The National Bank of Ukraine (NBU) has opened a multi-currency account for that purpose. Learn more

This account accepts donations in US, Canadian and Australian dollars, euros, British pounds, Swiss francs, yuan and yen.

UA823000010000032302338301027

Also accepting cryptocurrency donations – the fastest way to help. Learn more

BTC – 357a3So9CbsNfBBgFYACGvxxS6tMaDoa1P

ETH, USDT (ERC-20) – 0x165CD37b4C644C2921454429E7F9358d18A45e14

Spread the word!