WebdriverIO предоставляет гибкие возможности для автоматизации тестирования веб-приложений на мобильных устройствах через интеграцию с Appium и эмуляторами мобильных браузеров. Ключевым моментом является правильная конфигурация драйвера и определение среды выполнения.
Конфигурация WebdriverIO для мобильного браузера включает несколько обязательных параметров:
platformName — указывает мобильную платформу
(iOS или Android).deviceName — название устройства или эмулятора.browserName — указывает браузер, например,
Chrome для Android или Safari для iOS.automationName — указывает движок автоматизации,
например, UiAutomator2 для Android или
XCUITest для iOS.Пример конфигурации для Android:
exports.config = {
runner: 'local',
specs: ['./tests/**/*.js'],
capabilities: [{
platformName: 'Android',
deviceName: 'Pixel_4_API_30',
browserName: 'Chrome',
automationName: 'UiAutomator2',
}],
services: ['appium'],
appium: {
command: 'appium',
},
framework: 'mocha',
};
Для iOS необходимо изменить platformName,
deviceName, browserName и
automationName на соответствующие значения.
Для тестирования мобильных веб-приложений часто используется эмуляция устройств, без запуска физического устройства. WebdriverIO позволяет настроить эмуляцию через Chrome DevTools Protocol (CDP).
Ключевые параметры эмуляции:
deviceMetrics — задаёт размеры экрана, плотность
пикселей.userAgent — эмулирует поведение конкретного браузера
или устройства.Пример эмуляции iPhone X в Chrome:
await browser.cdp('Emulation', 'setDeviceMetricsOverride', {
width: 375,
height: 812,
deviceScaleFactor: 3,
mobile: true,
});
await browser.cdp('Emulation', 'setUserAgentOverride', {
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1',
});
После применения этих настроек все последующие команды браузера будут выполняться как на мобильном устройстве с заданными параметрами.
Мобильные интерфейсы имеют свои особенности, которые нужно учитывать при автоматизации:
touchAction.XPath, CSS с относительными
селекторами).waitForExist, waitUntil) с увеличенными
таймаутами.Пример эмуляции свайпа вниз на мобильной странице:
await browser.touchAction([
{ action: 'press', x: 200, y: 600 },
{ action: 'moveTo', x: 200, y: 100 },
'release'
]);
Для надёжного тестирования мобильных приложений важно учитывать версионность браузеров. Chrome и Safari на разных устройствах могут по-разному интерпретировать CSS и JavaScript. В WebdriverIO это регулируется через:
browserVersion в конфигурации
Appium.На мобильных браузерах применяются те же стратегии поиска, что и на десктопе, но с рядом особенностей:
accessibility id — полезно для элементов с атрибутами
доступности, особенно на iOS.xpath — часто необходим для сложных вложенных структур,
характерных для мобильных интерфейсов.class name и css selector — должны
учитывать адаптивный дизайн и возможное динамическое изменение
классов.WebdriverIO позволяет запускать несколько эмуляторов или реальных устройств одновременно. Для этого:
capabilities.maxInstances для ограничения
количества параллельных сессий.Пример:
capabilities: [
{
platformName: 'Android',
deviceName: 'Pixel_4_API_30',
browserName: 'Chrome',
maxInstances: 2
},
{
platformName: 'iOS',
deviceName: 'iPhone_13',
browserName: 'Safari',
maxInstances: 2
}
]
Такой подход позволяет быстро проверять кроссплатформенную совместимость веб-приложений на мобильных устройствах.
Для диагностики проблем на мобильных браузерах применяются следующие методы:
browser.getLogs('browser').browser.saveScreenshot('screenshot.png').Эти инструменты помогают выявлять различия между мобильной и десктопной версией веб-приложения и ускоряют поиск ошибок.
Тесты на мобильных браузерах можно интегрировать в пайплайны CI/CD.
Для этого используется запуск эмуляторов через Docker или облачные
сервисы (BrowserStack, Sauce Labs). WebdriverIO поддерживает настройку
services, которые позволяют подключать эти платформы без
изменения тестовой логики.
Эта структура охватывает все ключевые аспекты автоматизации веб-приложений на мобильных устройствах: от конфигурации и эмуляции до взаимодействия с элементами и интеграции с CI/CD.