TestCafe: убийца Selenium или современный инструмент для автоматизации функционального End-to-End тестирования

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

В этой статье я хочу раскрыть одно из современных инструментальных средств для автоматизации функционального тестирования TestCafe, которое имеет ряд преимуществ над «классикой» автоматизации, очень популярным долгое время, инструментом Selenium.

Ни в коем случае, я не хочу показать то, что Selenium плох в работе и больше не может использоваться для автоматизации (просто не имею права на это), но хочу открыть мир, в котором автоматизация может быть более гибкой и удобной для автоматизатора, при том, что в этом мире нет Selenium от слова совсем.

Статья будет полезна тем, кто ищет замену Selenium, думает какой инструментарий выбрать для внедрения автоматизации на проекте и также тем, кто всю жизнь использует только Selenium, для того, чтобы просто разнообразить свой кругозор (возможно в недалеком будущем придется перейти именно к новому инструменту в своей работе).

Для того, чтобы показать преимущества TestCafe, пройдемся по некоторым критериям и сделаем сравнение последнего и Selenium.

TestCafe это инструментальное средство для автоматизации End-to-End тестирования Web приложений основано на Node.js платформе, который под капотом использует Proxy.

Сравним TestCafe и Selenium по следующим критериям:

  • Инсталляция и подготовка окружения для автоматизации
  • Простота написания кода и его читабельность
  • Waits в автоматизации
  • Запуск тестов на удаленных устройствах
  • Язык программирования

Приступим к сравнению.

Инсталляция и подготовка окружения для автоматизации

Что бы установить TestCafe нужно выполнить всего-лишь одну команду:

npm install -g testcafe

1 минута и вуаля, все готово к работе (привет, Selenium).

Что значит все готово к работе?

Во-первых, для тестирования уже доступны следующие браузеры: Google Chrome, Chromium, Google Chrome Canary, Internet Explorer, Microsoft Edge, Mozilla Firefox, Opera, Safari.

Во-вторых, есть уже предустановленный Test Runner и Вы можете сразу писать и запускать автотесты с разными конфигурациями.

Если говорить о Selenium, то иногда подготовка среды занимает не то что больше минуты, а может занять и пару дней, так как, чтобы запускать тесты на различных браузерах, нужно настроить на каждый браузер отдельный WebDriver клиент. И да это не опечатка, на каждый браузер — отдельный WebDriver! И не всегда это все «гладко» работает, так как драйверы разрабатываются производителями браузеров и конечно наличие проблем совместимости никто не отменял.

Поэтому, если говорить о скорости настройки, возможности максимально быстро приступить к работе и не иметь проблем с драйверами для разных браузеров — TestCafe однозначно выигрывает в этом критерии.

Простота написания кода и его читабельность

Основные компоненты TestCafe можно использовать с минимальным знанием языка программирования или даже первоначального его отсутствия, что делает его очень привлекательным для новичков, которые могут с первых дней внедрять автоматизацию.

Давайте сделаем просто сравнение одних и тех же действий, которые написаны на JavaScript с использованием TestCafe и Selenium:

SeleniumTestCafe
// drag the pizza size slider
const sourceEle = driver.findElement(By.className("noUi-handle"));const actions = driver.actions({async: true});await actions.dragAndDrop(sourceEle, {x:100, y:0}).perform();

// fill the address form
await driver.wait(until.elementLocated(By.css('.google-map')),10000);await driver.findElement(By.className("confirm-address")).click();   await driver.findElement(By.id('phone-input')).sendKeys('+1-541-754-3001');await driver.findElement(By.css('#step3 .next-step')).click();
// drag the pizza size slider
.drag('.noUi-handle', 100, 0)

// fill the address form
await t.click('.confirm-address').typeText('#phone-input', '+1-541-754-3001').click('#step3 .next-step')

Как Вам? Согласитесь, в TestCafe не только количество кода меньше, но и читабельность на высоте, по сравнению с Selenium. Также, знание языка программирования должно быть на порядок выше для Selenium, поэтому без знания языка с первых дней автоматизировать у Вас явно не получится.

Waits в автоматизации

Одна из очень важных тем по автоматизации это ожидание появления элементов GUI (графического пользовательского интерфейса).

И однозначно это одна из слабых сторон Selenium. Очень часто нужно вручную определять waits как явные, так и неявные.

При этом TestCafe имеет свой встроенный автоматический механизм ожидания элементов GUI, что в разы облегчает жизнь автоматизатору. И конечно есть возможность выставить вручную таймауты ожидания, если это необходимо.

Вот пример того, как работает автоматический механизм ожидания для Assertions:

После того, как любое действие было выполнено (на рисунке Action Execution), не факт что изменения произойдут мгновенно, это может занять какое-то время (на рисунке Changes Occurred). Потому что при работе с Web приложениями мы всегда имеем дело с асинхронными операциями. Поэтому проверка того, было ли ожидаемое изменение произведено, происходит несколько раз (на рисунке Assertion attempts). Таким образом мы не получим зафейлиный тест, если будет определенная задержка. Но так же нам не нужно выставлять вручную длинные таймауты, что в итоге приведет к увеличению времени прогона тестов.

И сново TestCafe показывает себя с лучшей стороны по сравнению с Selenium.

Запуск тестов на удаленных устройствах

С помощью TestCafe тесты можно запускать на удаленных устройствах, в том числе и мобильных. А ключевое в этом то, что на удаленном устройстве, где будут раниться тесты, не нужно инсталлировать TestCafe. Для этого нужно просто перейти по ссылке в браузере на удаленном устройстве (или используя QR код) и тесты автоматически запустятся. Самое главное, чтобы устройство на котором установлен TestCafe и на том, где будут раниться тесты, были в одной сети.

Такая функциональная возможность будет очень актуальной, если нужно продемонстрировать наличие дефекта на окружении, где не установлен TestCafe или даже сама платформа Node.js. В общем это очень удобно.

Может ли таким функционалом похвастаться Selenium?

Язык программирования

В наше время очень популярными языками программирования, которые используются в связке с Selenium, являются: Java, Python, C#. Хотя Selenium поддерживает намного больше языков. Это конечно прекрасно, то что есть возможность выбора, но стоит отметить тот факт, что задача Selenium автоматизации работать с браузером, а нативный язык для разработки графической части и ее логики при взаимодействии с браузером это конечно же JavaScript.

Например, если мы используем стек Java (самая популярная связка с Selenium) и нам нужно сделать скроллинг страницы, то нужно будет обращаться все-равно к JavaScript:

JavascriptExecutor js = (JavascriptExecutor) driver; 
   js.executeScript("window.scrollBy(x,y)");

Поэтому TestCafe использует JavaScript, TypeScript и CoffeeScript в своей работе, что позволяет более гибко работать с браузером.

Возможность перехватывать и мокать запросы, параллельно ранить тесты, использовать headless режим, что очень актуально для снижения времени прогонки тестов и интеграции с CI/CD, гибко настраивать роли пользователей для тестирования функциональной безопасности, встроенные hooks, которые позволяют более гибко писать тесты и многое другое.

Все это делает TestCafe очень сильным игроком на рынке. И тут возникает логичный вопрос, а почему же тогда так популярен Selenium, а не TestCafe?

Те специалисты, которые активно анализируют современный инструментарий для автоматизации, при старте нового проекта, как правило, выбирают подобные тулзы как TestCafe, Cypress и Playwright, но никак не Selenium. Но увы, тех, кто анализирует активно рынок инструментов не так уж и много, и поэтому «классика» в виде Selenium продолжает использоваться дальше.

Надеюсь, что после прочтения этой статьи Вам захочется хоть немного ознакомится с TestCafe и если вдруг это произойдет, то детальную документацию Вы можете найти на официальном сайте.

И спасибо, за прочтение этой статьи до конца!

👍НравитсяПонравилось6
В избранноеВ избранном1
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Сравнивать testCafe vs Cypress сейчас как по мне это прямые конкуренты ....

Сейчас уже никто не использует голый селениум, когда вокруг куча перспективных инструментов типо Cypress/Wdio и тд. Думаю было бы логично сравнить TestCafe с одним из них, тут действительно интересно какой бы результат мы получили

Сейчас голым селениумом уже никто не пользуется, очень странное сравнение

убийца Selenium

Спасибо, поржал. Очередная, как под копирку, статья о TestCafe. Когда же уже люди перестанут сравнивать полноценные фреймворки с тупым драйвером для управления браузером, коим является чистый Selenium Webdriver? Возьмите любой другой враппер с вебдрайвером под капотом и сравнивайте — Selenide к примеру. Да что угодно — cypress, playwright, webdriverio.

Что бы установить TestCafe нужно выполнить всего-лишь одну команду:
npm install -g testcafe

Ага, а ещё забыли сказать что нужно установить node.js который тянет за собой половину интернета.

Во-первых, для тестирования уже доступны следующие браузеры:

Что значит уже доступны браузеры? TestCafe их сам скачал и установил?

Если говорить о Selenium, то иногда подготовка среды занимает не то что больше минуты, а может занять и пару дней, так как, чтобы запускать тесты на различных браузерах, нужно настроить на каждый браузер отдельный WebDriver клиент.

Сказки — WebdriverManager(github.com/...​nigarcia/webdrivermanager) уже давно автоматически всё скачивает. Единственный драйвер который нужно «настраивать» это IE, и то не сам драйвер, а нужно настроить недобраузер. Хорошо что он почти подох.

Поэтому, если говорить о скорости настройки, возможности максимально быстро приступить к работе и не иметь проблем с драйверами для разных браузеров

Достаточно взять из сотен примеров на гитхабе pom.xml или build.gradle и поехали.

Согласитесь, в TestCafe не только количество кода меньше,

В коде на вебдрайвере вы заведомо добавили лишние вызовы чтобы выглядело подлиннее?
Вообще не понимаю зачем брать JS для автоматизации, обмазываться async/await, страдать с промисами и т.д.

Также, знание языка программирования должно быть на порядок выше для Selenium, поэтому без знания языка с первых дней автоматизировать у Вас явно не получится.

Я бы сказал что автоматизировать без знаний языков программирования вообще глупая затея — получится плохо пахнущая немасштабируемая кривая коричневая масса. А потом появляются статьи типа «Селениум плохой потому что мы не смогли в программирование».

И однозначно это одна из слабых сторон Selenium. Очень часто нужно вручную определять waits как явные, так и неявные.

И снова вспоминаем что Selenium Webdriver просто драйвер для управления браузером и нужно писать свои врапперы с ожиданиями. Или взять готовое решение! Возьмём тот же Selenide — внутри уже заложены автоматические ожидания, даже писать ничего не нужно — селенид автоматически ждёт заданный период времени периодически проверяя появился ли элемент. Просто пишем тест.

Запуск тестов на удаленных устройствах

BrowserStack, Sauce Labs, LambdaTest, Selenoid... Полно всего на рынке, нужно только поискать.

Это конечно прекрасно, то что есть возможность выбора, но стоит отметить тот факт, что задача Selenium автоматизации работать с браузером, а нативный язык для разработки графической части и ее логики при взаимодействии с браузером это конечно же JavaScript.

Так себе аргумент :)

о нужно будет обращаться все-равно к JavaScript:

Нет, не нужно. www.selenium.dev/...​yboard_actions_in_detail
В библиотеках поверх голого вебдрайвера скролл к элементу обычно происходит автоматически. Пример — selenide.org/...​2018/01/12/selenide-4.10

Возможность перехватывать и мокать запросы, параллельно ранить тесты, использовать headless режим, что очень актуально для снижения времени прогонки тестов и интеграции с CI/CD, гибко настраивать роли пользователей для тестирования функциональной безопасности, встроенные hooks, которые позволяют более гибко писать тесты и многое другое.

Всё это и даже больше есть в фреймворках на основе вебдрайвера. Кстати, testcafe так же медленно работает как и раньше? Уже сделали нормальный параллельный запуск тестов?

а почему же тогда так популярен Selenium

Потому что этому инструменту 100500 лет, у него огромное коммьюнити, на основе него написано 100500 библиотек/фреймворков/you name it, все шишки уже набиты.
Но есть один недостаток — нужно уметь в програмирование. Не получится просто посадить обезьяну за компьютер и заставить её автоматизировать.

Думаю, статья специально написана в провокационном стиле, такой себе bait на комменты вроде вашего.

Что бы установить TestCafe нужно выполнить всего-лишь одну команду:
npm install -g testcafe

Free 30 day trial, TestCafe Studio $249.99, TestCafe Studio Pro $499.99
Хто хоче проспонсорувати програмістів ціє шняги з Калуги і Тули?

Успешную автоматизацию с TestCafe можно без проблем реализовать абсолютно БЕСПЛАТНО без применения каких либо их студий.

После

убийца Selenium

даже не пытался читать. Чтобы убить такого монстра надо лет 5 крутить рекламу

TestCafe

на всех каналах, получить поддержку корпорации по масшатабу вроде гугла, еще и зиллионы девелоперов должны на это купиться.

Звучить все завжди радісно і класно, але я б хотів подивитись на якийсь повноцінний проект на цьому TestCafe, бо оце driver.findElement() звісно прікольно, але це капля в морі, куди більш чесніше було б порівняти інструменти в плані архітектури і більш глобальних можливостей коду.

с минимальным знанием языка программирования или даже первоначального его отсутствия,

це більше мінус, ніж плюс. імхо
Selenium також підтримує

headless

Та й взагалі, чому всі досі порівнюють нові тулзи тільки з чистим Selenium? :)
Не знаю за інші мови, хоча там теж є свої цікаві враппери, але світі джави є Selenide, який більшість хто юзає для старту нових проектів зараз.

Щодо перспективи на ринку, навіть не враховуючи Selenium, а тільки згадані вище Cypress i Playwright, цифри говорять самі за себе:
— Cypress — 93 вакансії на Україну — jobs.dou.ua/...​s/?search=cypress&descr=1
— Playwright — 13 вакансій — jobs.dou.ua/...​search=playwright&descr=1
— TestCafe — 7 вакансій — jobs.dou.ua/...​/?search=testcafe&descr=1

Selenium не враховую, бо тут ітак все очевидно — 282.

Все інше виглядає перспективно

Не знаю за інші мови, хоча там теж є свої цікаві враппери, але світі джави є Selenide, який більшість хто юзає для старту нових проектів зараз.

... і з ростом фреймворку часто повертаються назад до чистого Selenium-а з власними кастомними врапперами за потреби

часто повертаються назад до чистого Selenium-а

ну и сами себе злые буратины в таком случае.

Плюсую за Selenide на Java. Все в рази коротше чистого Селеніума, що не для тестування придцмувався, лініва ініціалізація, вбудовані розумно налаштовані вейтери, елегантна реалізація PageObject, хоча не завжди він і потрібен.

Подписаться на комментарии