Миграция с TestCafe на WebdriverIO: Подробное руководство
WebdriverIO — это один из самых популярных фреймворков для автоматизации тестирования в браузере, который предоставляет мощные инструменты для работы с различными браузерами и мобильными устройствами. В этой статье рассматривается процесс миграции с TestCafe на WebdriverIO, анализируются основные различия между этими инструментами и даются рекомендации по переходу.
Перед тем как перейти к процессу миграции, важно разобраться в основных различиях между двумя фреймворками.
TestCafe — это инструмент для тестирования с использованием Node.js, который использует свой собственный механизм управления браузером. Тесты в TestCafe выполняются с использованием браузерных агентов, не требующих установки дополнительных драйверов. Это делает настройку простым и быстрым процессом.
WebdriverIO, с другой стороны, использует WebDriver-протокол для взаимодействия с браузерами и требует наличия соответствующих драйверов. WebdriverIO предоставляет более широкие возможности по кастомизации, интеграции с различными инструментами и сложным кейсам. Он также поддерживает работу с многими облачными сервисами, такими как Sauce Labs, BrowserStack и другими.
Несмотря на это, оба фреймворка могут эффективно выполнять автоматизацию тестирования, однако WebdriverIO имеет более гибкие настройки и более сложную конфигурацию.
Важной частью миграции является перенос структуры проекта, так как WebdriverIO и TestCafe имеют свои особенности в организации тестов и файлов.
Тесты в TestCafe обычно располагаются в папке tests.
Структура проекта может выглядеть так:
/project-root
├── /tests
├── test1.js
├── test2.js
├── package.json
├── .babelrc
├── testcafe.json
В WebdriverIO структура проекта может быть более разнообразной в
зависимости от выбранных конфигураций. По умолчанию, при инициализации
проекта с помощью webdriverio CLI, структура выглядит
следующим образом:
/project-root
├── /test
├── /specs
├── test1.js
├── test2.js
├── /wdio.conf.js
├── /package.json
Для запуска тестов в WebdriverIO используется файл конфигурации
wdio.conf.js, который содержит все параметры для
тестирования, включая настройки браузеров, отчетности и другие
параметры.
Для начала необходимо установить WebdriverIO и его зависимости. В отличие от TestCafe, WebdriverIO требует установки драйверов и сервисов, необходимых для работы с браузерами.
Установка WebdriverIO:
npm init wdio .Установка зависимостей:
npm install --save-dev webdriverio @wdio/cli @wdio/local-runner @wdio/mocha-framework @wdio/chromedriver-serviceНастройка конфигурационного файла wdio.conf.js с
использованием автоматического процесса через команду
npx wdio config.
WebdriverIO также предлагает богатые возможности по настройке репортинга, сервисов и различных интеграций с CI/CD.
В TestCafe настройка тоже достаточно проста, и она выполняется через
файл конфигурации testcafe.json. Однако, в отличие от
WebdriverIO, TestCafe поддерживает более ограниченный набор сервисов для
настройки интеграции с браузерами.
Пример конфигурации TestCafe:
{
"src": "tests/*.js",
"browsers": [
"chrome",
"firefox"
]
}
Для большинства пользователей TestCafe достаточно стандартных настроек, однако WebdriverIO в этом плане предоставляет больше гибкости.
При переносе тестов с TestCafe на WebdriverIO необходимо учитывать несколько ключевых моментов, включая синтаксис команд и методы взаимодействия с элементами.
TestCafe использует свой собственный API для взаимодействия с элементами. Пример простого теста на TestCafe:
import { Selector } from 'testcafe';
fixture `Test`
.page `https://example.com`;
test('Check page title', async t => {
const title = await Selector('title').innerText;
await t.expect(title).eql('Example Domain');
});
В WebdriverIO взаимодействие с элементами происходит через различные методы, использующие WebDriver-протокол:
describe('Test', () => {
it('Check page title', () => {
browser.url('https://example.com');
const title = browser.getTitle();
expect(title).toBe('Example Domain');
});
});
Основные изменения:
browser.url() для
навигации.browser.getTitle().expect.В TestCafe взаимодействие с элементами осуществляется через
Selector. В WebdriverIO для поиска элементов используется
метод $('selector'), который возвращает объект, с помощью
которого можно выполнять различные действия, такие как клик, ввод текста
и другие.
Пример TestCafe:
const button = Selector('#submit');
await t.click(button);
Пример WebdriverIO:
const button = $('#submit');
button.click();
В WebdriverIO взаимодействие с элементами также поддерживает более
сложные методы, такие как ожидание элементов с использованием
waitForExist(), waitForDisplayed() и другие,
что дает большую гибкость при написании тестов.
В TestCafe ожидания обрабатываются автоматически с помощью
await. Например, при клике на элемент TestCafe сам
подождет, пока элемент не станет доступным.
В WebdriverIO также можно использовать waitUntil() и
другие методы для управления ожиданиями:
const button = $('#submit');
button.waitForExist({ timeout: 5000 });
button.click();
Это позволяет иметь более явное управление ожиданиями и гибкость в настройке таймаутов и условий.
Один из важных этапов миграции — это настройка интеграции с системами непрерывной интеграции (CI/CD). WebdriverIO предлагает богатую документацию по настройке с такими популярными сервисами, как Jenkins, CircleCI, GitHub Actions и другими.
TestCafe легко интегрируется с CI/CD системами, но имеет ограниченные
возможности кастомизации по сравнению с WebdriverIO. В большинстве
случаев TestCafe достаточно установить через npm и
настроить запуск через CI/CD.
Пример настройки CI с использованием GitHub Actions для WebdriverIO:
name: WebDriverIO Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npx wdio run wdio.conf.js
WebdriverIO позволяет легко интегрировать различные плагины для отчетности, сшивания отчетов и создания снимков экрана, что может значительно упростить анализ тестов в CI/CD.
Миграция с TestCafe на WebdriverIO может занять некоторое время из-за различий в синтаксисе, структуре проекта и подходах к написанию тестов. Однако WebdriverIO предоставляет гораздо больше возможностей для кастомизации и работы с сложными тестовыми сценариями. Переход на WebdriverIO открывает возможности для гибкой настройки, более продвинутой работы с браузерами и эффективной интеграции с CI/CD процессами.