вівторок, 28 лютого 2012 р.

Звіт з Selenium Camp 2012

Спершу мушу сказати, що ця, друга, конференція була набагато цікавіша за першу, а якість доповідей була вельми висока. Серед доповідачів було 4 з 9 основних комітерів Selenium'а. 
Цього разу Selenium Camp проходив у відомому київському хмарочосі "Парус", що правда на другому поверсі, тому це, в принципі, байдуже.


Виступи були організовані на 3х сценах: А - велика, В - по-менше, С - невелика загородка у холі. Дивіться детальніше тут: http://seleniumcamp.com/
Колись потім організатори обіцяли викласти відео всіх виступів. А поки що пропоную свої враження від тих, на яких був особисто присутній.
До речі, шукайте цих авторів у твіттері, якщо вам цікаво.


The road to a standard
 David Burns 
Це один з координаторів проекту. Доповідь була про те, що WebDriver має бути включений у стандарт для бровзерів. Вони у Mozilla вже впилюють АПІ у ФФ, майже домовилися з Оперою та Гуглом, а Майкрософт і Еппл їх ігнорують. Тим не менш, вже у червні можуть розпочатися перемовини з W3C. 
Тобто скоро для того, щоб твоя саморобка вважалася "веб-бровзером", вона буде повинна підтримувати WebDriver API. Побажаємо всього найкращого їм у цій справі.
Дійсно насмішила тут секція питань. Майже всі питання задавали прості бидло авто-тестери, що були обурені тим, що ними зарепорчені баги досі ніхто не фіксить! На що, звісно, отримали відповідь: Хочете, щоб було пофікшено - фіксіть! (Це була перша доповідь, мабуть, люди ще не зрозуміли, чому сюди прийшли.)

Selenium in the life of day-to-day testing. Practical aspects.

Руслан Стражник 
Чувак розповів, що у них є Jenkins, і що треба користати SauceLabs. Успіхів йому! Може й собі до цього доростемо колись.

TDD c помощью функциональных тестов на WebDriver

Мікалай Аліменко́ў
Тут було продемонстровано чудовий приклад "ТДД ін екшон"!
Основні моменти такі:
  • для початку написання тесту треба мати лише Дані та Локатори;
  • дані беруться від продакт-овнера;
  • про локатори команда домовляється заздалегідь, сам пан Мікалай радить знаходити елементи так:
    • форми за id,
    • кнопки за ім’ям (name),
    • лінки за текстом.
  • Автоматизація роботи в вашому IDE - важливий чинник. Радив всякі плагіни для автостворення класів-заглушок, кемел-кейс 2 нормал текст та ін.
В цілому - дуже динамічна та вражаюча доповідь, видно натреновану майстерність. Одразу захотілося піти до них в XP Injection на якийсь тренінг. Ледве втримався :-)

Новая жизнь WebDriver и PHP. Путь от разработки фреймворка до организации производственного процесса.

Хлопці, виходячи з виробничої необхідності, зробили те саме, що зараз намагаємося ми у себе: зробили власне АПІ для пхп через JSON Wire Protocol. До речі, хтось десь підслухав Девіда Бьорнса особисту думку про пхп та чому досі не має супортних байндінгів для WebDriver'а; з неї ясно видно що їх ніколи не буде :-)
Ну і звісно ж... "Чувак розповів, що у них є Jenkins, і що треба користати SauceLabs. Успіхів йому!"

Selenium против AJAX

Цей пан - один з головних контриб’юторів. Було більше схоже на практичний клас. Я цілу сторінку занотував :-) . На початку ми зрозуміли, що робота з AJAX та JS - це здебільшого пошук елементів у динамічній DOM та очікування на появу або зміну параметрів елементів. Тому щодо цього декілька практичних порад:
  • Щоб не чекати повного завантаження сторінки, варто використовувати асинхронний режим для бровзера. Дуже актульно для моїх сайтів зі 100500 банерами айаксо-флешевими, що змушують тести чекати по 5хв і падати з помилками. Наразі асинхронний режим доступний тільки у Firefox - вмикається створенням профілю з налаштуванням "unstable", та у HtmlUnit - вмикається наслідуванням від стандартного класу та перезаписуванням у ньому параметра (не встиг записати якого, знайду потім).
  • WebDriver не може клікнути по елементу, якого не видно. Відноситься до всіх варіантів невидимості: властивісті, перекритий іншим елементом, знаходиться за межами вікна.
  • Якщо у вас щось не знаходиться, чи не клікається, чи ще якогось трясця - ставте затримку 200мс!
  • ІЕ дуже часто-густо змінює DOM. Причому можуть змінюватися навіть ті її частини, що, здавалося б, до активних ніяким боком не відносяться.
  • Витримки та очікування треба вибирати уважно, правильно ставлячи умову чекання.
  • Щоб зробити всі очікування безумовними: driver.manage().timeouts().implicitlyWait(10,TimeUnits.SECONDS);
  • Найнадійніший спосіб перехоплення аляртів - будь-де чекати на UnhandledAlertException.
  • Клік може губитися, якщо обробник кліку високо по DOM від самого елемента, по якому клікнули. Тому для надійності краще клікати саме по тому елементу, де і є обробник цього кліку.
  • Synthesized Events can be turned on through Firefox profile (тут я не знаю про що йдеться, геть не пам’ятаю, що малося на увазі...)

Cool tricks with Selenium

Цей чувак давненько полишив нашу Неньку, та й презентацію почав-бо російською, але після 3х речень перейшов на англійську. Працює в Групоні, вони йому з Чикаго навіть відрядження у самий Київ на конференцію оплатили.
Розповідав теж про всякі вигадки та прийоми.
  • Щоб чекати на закінчення усіх скриптів, використовуйте "if JQueryActive = 0 ..."
  • фотати екран можна легко за допомогою  "getScreenShotAs"
  • можна знімати відео проходження тесту за допомогою навіть не дуже довгого скриптика для ffmpeg (чувак сказав, що у нього тільки на Лінуксі получилось)
  • Іноді варто зробити лог-ін через URL, щоб зайвий раз по сторінках не клацати. Тобто дані автентифікації загорнути у get-запит.
  • Щоб швиденько і в усіх тестах завантажувати файли, можна налаштувати, щоб воно це робило автоматично, через профілі.
  • Headless tests - 2 times faster.
  • Щоб запускати тести паралельно, не забудь мати для кожного тесту окремі: БД, екран, незалежність тестів один від одного.
І під кінець Діма приголомшив усіх, запустивши тест з WebDriver на iPhone! 
Пообіцяв тренуватися та для Андроїда теж запустити :-)
Коли вийде все відео докладів, це раджу переглянути! Було дійсно цікаво, доповідач отримав неймовірну кількість "Дякую"-папірців.

WebDriver Internals

Останнім виступав ще один євангеліст-селеніумовод, цей чувак написав все що є на Ruby для Selenium'a.
Особливо нічого не можу розповісти про його виступ, просто скажу, що у легкому, не напруженому оточенні за якихось 20хв ми створили повністю підтримувану на всіх рівнях функцію розгортання вікна на весь екран. 
Чувак теж звав писати патчі. Так що, друзі, світле майбутнє не за горами, якщо ви почнете допомагати такому корисному проектові :-)