Намагаюся налаштувати виконання Selenide-тестів в Selenium Grid. Допоможіть розібратися, будь ласка.
Коротенько суть ідеї: мені потрібно виконувати тести в Firefox 24й версії на декількох нодах (ноди на Linux, хост-машина на Windows, якщо має значення). Браузер повинен запускатися відразу в режимі fullscreen.
Відкриття браузера виконую в rules.CommonRule (розширює TestWatcher рулу).
питання №1
Чи правильно роблю, що для управління настройками браузера описую свій драйвер FirefoxCustomDriver через реалізацію WebDriverProvider?
питання №2
Чи правильно розумію, що для застосування цього драйвера досить додати системний параметр через System.setProperty (); ?
питання №3
Чому не виходить перевести браузер у повноекранний режим командою вебдрайвера. windows (). fullscreen (); ?
Зараз доводиться робити так:
Але зараз він розгортається тільки після відкриття першої сторінки. Чи можна якось налаштувати, щоб браузер відразу відкривався в повноекранному режимі? Може бути через налаштування профілю або DesiredCapabilities?
питання №4
На хост-машині піднімаю Selenium Grid хаб командою:
На Linux-нодах піднімаю Selenium Grid Ноди командою:
Ноди успішно реєструються в хабі. Далі вважаю, що треба якось повідомити проекту, де знаходиться хаб. Тому на хост-машині запускаю тести командою:
На що у великій кількості отримую такі повідомлення:
Після них браузер так і не запускається. Де я помилився і як правильно спрямувати тести в Grid?
Для роботи з ґрідом потрібен RemoteWebDriver. а не простий FirefoxDriver.
Та й по-моєму кастомний інстанси драйвера набагато легше сетіть в контекст Selenide через WebDriverRunner.setWebDriver (myWebDriver).
не виходить перевести браузер у повноекранний режим
Чи не дивився вихідні fullscreen (). але раніше досить було викликати maximize ().
Судячи з документації, при WebDriverRunner.setWebDriver (myWebDriver) доведеться брати на себе роботу з відкриттям / закриттям браузера, чого не хотілося б. Здалося зручніше взяти WebDriverProvider і продовжувати використовувати Selenide звичним чином.
Наскільки я знаю, maximize () розгортає вікно браузера за розміром екрану, але не переводить його в повноекранний режим (як якщо натиснути клавішу F11). Про всяк випадок перевірив - так і є, тобто maximize () не підходить. І дивно, що команда fullscreen () поводиться точно так само.
Про RemoteWebDriver - спасибі, замінив. При створенні екземпляра відразу передаю йому параметром URL хаба, але не допомогло - отримав ті ж самі повідомлення. Для проби прибрав параметр -Dremote з виклику mvn. і коли в консолі мавена знову посипалися ці повідомлення, в консолі Ноди раптом посипалися такі помилки (раніше була тиша):
Судячи з документації, при WebDriverRunner.setWebDriver (myWebDriver) доведеться брати на себе роботу з відкриттям / закриттям браузера
Ну в вашому прикладі ви тепер відкриваєте браузер самостійно шляхом виклику
А закривати браузер так само просто, як і сетіть: WebDriverRunner.closeWebDriver ().
При створенні екземпляра відразу передаю йому параметром URL хаба, але не допомогло
Логічно, URL невірний. Потрібно то спочатку було почитати, як правильно конектитися до хабу.
Ну в вашому прикладі ви тепер відкриваєте браузер самостійно шляхом виклику
А закривати браузер так само просто, як і сетіть: WebDriverRunner.closeWebDriver ().
Боюся помилитися, але Selenide ж ще і відстежує, чи можна використовувати вже відкритий браузер для наступного тесту або треба його перевідкрити, чи коректно запустився браузер або треба спробувати відкрити його ще раз і т.п.
Все це залишиться на Selenide або це теж треба буде реалізовувати самостійно?
Перед попереднім відповіддю я і запущено в пісочницю такий URL, подивившись на офіційний приклад
Ну і який же URL в офіційному прикладі?
А тепер подивимося на оригінальний:
Давайте пошукаємо десять відмінностей.
Все це залишиться на Selenide або це теж треба буде реалізовувати самостійно?
Якщо ви використовуєте кастомний драйвер, передбачається, що ви як мінімум повинні сетіть і закривати його, викликаючи вище зазначені методи. Все інше вже відбувається в контексті selenide. @asolntsev думаю зможе більше деталей надати. Особисто я завжди використовував кастомний Раннер. Тому проблем з викликом сетера в @Before і закриттям в @After ніяких не виникало. А взагалі, ось тут в javadocs описано, як потрібно правильно сетіть кастомний драйвер.
А тепер подивимося на оригінальний:
Давайте пошукаємо десять відмінностей.
Про всяк випадок перепробував:
1) вказувати URL відразу і в параметрі -Dremote. і в коді при створенні RemoteWebDriver:
2) вказувати URL в параметрі -Dremote. а в коді створювати RemoteWebDriver без параметра URL
3) не вказувати параметр -Dremote. але в коді створювати RemoteWebDriver з параметром URL
По-моєму, самий простий і очевидний варіант, який потрібно було спробувати в першу чергу:
- Самому створити RemoteWebDriver перед запуском тесту.
- Там же викликати WebDriverRunner.setWebDriver (yourRemoteDriverInstance).
- В кінці тесту викликати WebDriverRunner.closeWebDriver ().
І ніяких -Dremote і танців з бубном.
Таке-то рішення працює, спасибі. Ну нехай поки так і залишиться.
Але як і раніше хвилює момент, що той же саме не завелося через WebDriverProvider. Очікував, що з ним якраз і уникну "танців з бубном", але вийшло навпаки.