WebDriver — это стандартизированный протокол, обеспечивающий взаимодействие между тестами и браузерами. Он разработан для автоматизации управления браузером на уровне пользователя, позволяя отправлять команды для навигации, взаимодействия с элементами страницы и получения состояния веб-приложения. Основной целью протокола является создание абстракции над конкретными реализациями браузеров, чтобы тесты были переносимыми и независимыми от движка браузера.
WebDriver работает как клиент-серверная архитектура. Тесты на JavaScript (клиент) отправляют HTTP-запросы серверу WebDriver (например, chromedriver, geckodriver), который напрямую управляет браузером. Важные аспекты:
POST /session создаёт новую сессию.Протокол WebDriver основан на REST-архитектуре:
capabilities).findElement,
click, getText.Все команды имеют строгую структуру JSON. Например, поиск элемента может выглядеть так:
POST /session/{sessionId}/element
{
"using": "css selector",
"value": "#login-button"
}
Ответ содержит уникальный идентификатор найденного элемента, который используется в последующих действиях.
Современный WebDriver основан на спецификации W3C. Ключевые положения:
WebDriverIO — это JavaScript-фреймворк для автоматизации браузеров, который является клиентом WebDriver. Основные особенности:
$, $$,
click, setValue) поверх стандартных команд
WebDriver, сохраняя совместимость с W3C.Пример создания сессии и поиска элемента через WebDriverIO:
const { remote } = require('webdriverio');
const browser = await remote({
capabilities: {
browserName: 'chrome'
}
});
const loginButton = await browser.$('#login-button');
await loginButton.click();
await browser.deleteSession();
В этом примере WebDriverIO автоматически отправляет команды протокола WebDriver, управляет сессией и возвращает результаты действий.
WebDriverIO использует команды WebDriver для поиска элементов:
findElement — возвращает первый найденный элемент.findElements — возвращает массив найденных
элементов.Команды взаимодействия с элементами через WebDriverIO полностью соответствуют W3C спецификации, что обеспечивает предсказуемость работы тестов на разных браузерах.
no such element,
timeout), которые драйвер возвращает в ответ на
некорректные команды.Спецификация WebDriver допускает расширения драйверов, которые предоставляют дополнительные команды вне стандарта W3C. WebDriverIO поддерживает эти расширения через собственные методы, что позволяет работать с мобильными устройствами, эмуляторами и нестандартными функциями браузеров.
WebDriverIO, опираясь на строгий протокол WebDriver, обеспечивает стабильную и предсказуемую автоматизацию браузеров, позволяя создавать сложные и надёжные тестовые сценарии, полностью соответствующие современным стандартам.