WebdriverIO предоставляет мощные возможности для автоматизации мобильного тестирования через интеграцию с Appium. Appium выступает мостом между тестами на JavaScript и мобильными приложениями на платформах Android и iOS, поддерживая как нативные, так и гибридные приложения. Интеграция WebdriverIO с Appium позволяет создавать стабильные и масштабируемые тесты, используя привычный синтаксис WebdriverIO.
Для работы с Appium через WebdriverIO необходимо установить несколько ключевых пакетов:
npm install @wdio/cli @wdio/local-runner @wdio/mocha-framework wdio-appium-service appium
@wdio/cli — инструмент командной строки для
конфигурации WebdriverIO.@wdio/local-runner — локальный запуск тестов.@wdio/mocha-framework — фреймворк тестирования
Mocha.wdio-appium-service — сервис для интеграции с
Appium.appium — сервер Appium для взаимодействия с мобильными
устройствами.После установки необходимо инициализировать проект WebdriverIO и выбрать Appium в качестве сервиса:
npx wdio config
В процессе конфигурации указываются:
Файл конфигурации wdio.conf.js содержит ключевые
параметры для интеграции с мобильными устройствами. Основные
разделы:
exports.config = {
runner: 'local',
path: '/wd/hub',
port: 4723,
specs: ['./test/specs/**/*.js'],
maxInstances: 1,
capabilities: [{
platformName: 'Android',
'appium:deviceName': 'Pixel_4_API_30',
'appium:platformVersion': '11.0',
'appium:app': '/path/to/app.apk',
'appium:automationName': 'UiAutomator2'
}],
services: ['appium'],
framework: 'mocha',
reporters: ['spec']
};
Ключевые моменты:
platformName — определяет платформу
(Android или iOS).deviceName и platformVersion —
идентификация тестового устройства.app — путь до APK или IPA файла.automationName — движок автоматизации
(UiAutomator2 для Android, XCUITest для
iOS).Тесты для мобильных приложений имеют схожую структуру с веб-тестами, но используют специфические селекторы. Примеры селекторов:
accessibility id — идентификатор доступности
компонента.xpath — путь к элементу в иерархии приложения.id или class name — стандартные селекторы
для элементов.Пример простого теста на Mocha:
describe('Login flow', () => {
it('should login successfully', async () => {
const usernameInput = await $('~username');
const passwordInput = await $('~password');
const loginButton = await $('~loginBtn');
await usernameInput.setValue('testuser');
await passwordInput.setValue('password123');
await loginButton.click();
const homeScreen = await $('~homeScreen');
await expect(homeScreen).toBeDisplayed();
});
});
Особенности мобильного тестирования:
swipe
или tap.async/await.WebdriverIO предоставляет команды для выполнения жестов и взаимодействия с устройством:
touchAction — выполняет одиночные и последовательные
касания:await driver.touchAction([
{ action: 'press', x: 100, y: 200 },
{ action: 'moveTo', x: 300, y: 200 },
'release'
]);
driver.back() — имитация кнопки “Назад”.driver.hideKeyboard() — скрытие клавиатуры.driver.launchApp() и driver.closeApp() —
управление жизненным циклом приложения.driver.reset() — сброс приложения к начальному
состоянию.Эти команды позволяют тестам быть максимально приближенными к поведению реального пользователя.
Appium поддерживает параллельное тестирование на нескольких
устройствах. В wdio.conf.js задаются несколько возможностей
(capabilities):
capabilities: [
{
platformName: 'Android',
'appium:deviceName': 'Pixel_4_API_30',
'appium:app': '/path/to/app.apk',
'appium:automationName': 'UiAutomator2'
},
{
platformName: 'iOS',
'appium:deviceName': 'iPhone 12',
'appium:app': '/path/to/app.ipa',
'appium:automationName': 'XCUITest'
}
]
Советы по оптимизации:
sleep(), использовать
ожидания (waitForDisplayed, waitUntil).WebdriverIO с Appium легко интегрируется с системами CI/CD:
process.env), что упрощает запуск на разных
устройствах.Пример передачи пути к приложению через переменные:
'appium:app': process.env.APP_PATH || '/default/path/to/app.apk'
console.log() для отслеживания значений
элементов и состояний.services: [['appium', {
logPath: './logs',
args: {
relaxedSecurity: true
}
}]]
afterTest: async function(test, context, { error }) {
if (error) {
await driver.saveScreenshot(`./screenshots/${test.title}.png`);
}
}
Это позволяет детально анализировать причины неудач и упрощает отладку мобильных сценариев.
AVD Manager,
iOS — через Xcode Simulator.WebdriverIO + Appium позволяет тестировать WebView и гибридные приложения:
const contexts = await driver.getContexts(); // ["NATIVE_APP", "WEBVIEW_1"]
await driver.switchContext('WEBVIEW_1');
Эта интеграция обеспечивает единый подход к тестированию на разных мобильных платформах, снижает дублирование кода и повышает надежность автоматизации.