Kirk + chrome devtools
Привет, друзья-айтишники. Сегодня хочу поделиться с вами очередной порцией полезной информации из мира автоматизации тестирования. Поговорим более детально о возможностях использования Сhrome developer tools во время прогонов автотестов.
Записывать видео мы уже давно научились, а вот использовать такой мощный инструмент, как devtools, пока еще нет.
Developer tools обладает обширным кругом возможностей. Мы с вами используем его каждый день: для поиска элеметов, для того, чтобы посмотреть в network, возможно, даже попытаться замедлить браузер, чтобы посмотреть на поведение вашего сайта.
Использование devtools в тестах было невозможно, пока на одной из конференций не был показан инструмент devtools proxy.
Сам прокси написан на Python, но это не ограничивает нас от использования его в Java проектах.
Перед тем, как перейти к основной части, я поясню, чем вообще может помочь devtools именно во время прогона тестов. Во-первых, вы можете смотреть сорс HTML страницы прямо во время исполнения тестов. Во-вторых, можно смотреть табу network, все запросы и ответы. Это позволяет быстрее понять, что во время теста пошло не так и почему же он упал. Хочу отметить, что возможность записывать трафик общения между браузером и бекендом уже давно можно реализовать с помощью browsermob proxy. Но proxy накладывает свои ограничения и вы не можете так прям в live режиме смотреть, что же там происходит.
Я уже давно играюсь с DevTools proxy и буквально недавно сделал интеграцию devtools + Kirk.
Выглядит это так:
class DevToolsDemo {
@Test fun testCanAddTwoNumbersListener() {
val chrome = Browser(listener = DevTools())
chrome.to("http://juliemr.github.io/protractor-demo/") {
element("input[ng-model='first']") value "1"
element("input[ng-model='second']") value "2"
select("select[ng-model='operator']").selectOption("+")
element("#gobutton").click()
element("h2.ng-binding").shouldHave(text("3"))
}
}
}
В Kirk класс Browser умеет принимать два параметра в конструкторе: WebDriver и реализацию интерфейса KirkListener.
Этим мы и воспользуемся:
class DevTools : AbstractEventListener() {
override fun onStart() {
openDevTools()
}
}
Результат смотрим на видео:
На видео вы видели только один браузер потому, что тесты бежали в headless chrome. Эту возможность Kirk тоже поддерживает "из коробки". Я специально сделал пример с "безголовым хромом", чтобы более ярко продемонстрировать возможности. С наличием такой фичи мы можем дебажить тесты, которые бегут на другой машине или в CI (*).
В целом я очень доволен появлением такой фичи: теперь команда может более эффективно дебажить тесты и анализировать результаты. Я уверен, что мы еще будем обкатывать эту функциональность и найдем много полезных фишек, о которых можно будет рассказать обществу автоматизаторов.
BTW: Ближайшее событие, на котором можно будет услышать о тестах на Котлине Kirk + DevTools и получить еще кучу полезной информации - QAFest. Не пропустите! Всех посетителей ждет очень много интересного - это я могу гарантировать как член программного коммитета.
(*) Для нормального подключения удаленно нужно делать port forwarding