WebdriverIO предоставляет мощные инструменты для автоматизированного тестирования веб-приложений, но его возможности не ограничиваются только браузерами. С помощью WebdriverIO можно тестировать и нативные мобильные приложения на платформах Android и iOS. В этом разделе подробно рассмотрены особенности настройки и использования WebdriverIO для тестирования нативных приложений.
Нативные мобильные приложения, в отличие от веб-приложений, работают в специфической среде операционной системы и используют нативные компоненты для взаимодействия с пользователем. Это означает, что для их тестирования потребуется использовать специфические подходы и инструменты. WebdriverIO в связке с Appium предоставляет возможности для тестирования таких приложений.
Appium — это инструмент с открытым исходным кодом, который позволяет автоматизировать тестирование мобильных приложений, предоставляя драйверы для взаимодействия с нативными приложениями на платформе Android и iOS. WebdriverIO может использоваться как интерфейс для работы с Appium, что позволяет интегрировать автоматические тесты для мобильных приложений в общую систему тестирования.
Для начала необходимо установить WebdriverIO и Appium, а также настроить необходимые зависимости. В случае работы с мобильными приложениями потребуется также установить Appium сервера и драйверы для Android и iOS. Процесс установки можно разделить на несколько шагов.
npm install --save-dev @wdio/cli @wdio/appium-service appium
Запуск утилиты для создания конфигурационного файла:
npx wdio config
При выборе сервисов необходимо указать Appium service. В процессе
настройки будет создан файл wdio.conf.js, в который позже
добавляются параметры для тестирования мобильных приложений.
Для работы с Android необходимо установить Android SDK и настроить
переменную окружения ANDROID_HOME. Для iOS требуется
наличие Xcode и его инструментов командной строки.
appium
Сервер Appium будет слушать на определённом порту и готов принимать команды для управления мобильным устройством.
После того как WebdriverIO и Appium установлены и настроены, можно приступить к написанию тестов для мобильных приложений. В конфигурационном файле WebdriverIO необходимо указать параметры, специфичные для мобильных устройств.
Пример конфигурации для тестирования приложения на Android:
exports.config = {
runner: 'local',
services: ['appium'],
appium: {
command: 'appium',
},
capabilities: [{
platformName: 'Android',
platformVersion: '10.0',
deviceName: 'Android Emulator',
app: '/path/to/your/app.apk',
automationName: 'UiAutomator2',
appPackage: 'com.example.app',
appActivity: 'com.example.app.MainActivity',
}],
specs: ['./test/**/*.js'],
framework: 'mocha',
};
Здесь:
platformName — операционная система мобильного
устройства.platformVersion — версия операционной системы.deviceName — название устройства или эмулятора.app — путь к .apk файлу для Android или .ipa файлу для
iOS.automationName — драйвер для автоматизации
тестирования. Для Android используется UiAutomator2, а для
iOS — XCUITest.appPackage и appActivity — параметры для
Android-приложений, указывающие на имя пакета и активность, которая
будет запущена.WebdriverIO использует привычный синтаксис для взаимодействия с мобильными приложениями, аналогичный веб-тестированию, но с добавлением мобильных специфичных команд. Тесты для мобильных приложений могут включать взаимодействие с элементами, которые относятся только к мобильным платформам, такими как кнопки, поля ввода, слайдеры, списки и т.д.
Пример теста для Android-приложения:
describe('Мобильное приложение', () => {
it('должно загрузиться и проверить текст на главной странице', async () => {
const title = await $('android=new UiSelector().text("Главная")');
await expect(title).toBeDisplayed();
});
it('должно нажать на кнопку "Войти" и перейти на экран входа', async () => {
const loginButton = await $('android=new UiSelector().text("Войти")');
await loginButton.click();
const loginTitle = await $('android=new UiSelector().text("Вход")');
await expect(loginTitle).toBeDisplayed();
});
});
В этом примере:
UiSelector помогает искать элементы по тексту.Для iOS-приложений синтаксис будет аналогичен, но с использованием соответствующих селекторов и атрибутов, подходящих для iOS.
WebdriverIO позволяет управлять мобильными устройствами с помощью различных команд. Например, можно делать скриншоты, записывать видео, управлять сетевыми настройками, симулировать различные жесты и нажатия.
Пример команды для записи скриншота:
it('сделать скриншот экрана', async () => {
await browser.saveScreenshot('./screenshots/screen.png');
});
Другие полезные команды:
await driver.touchAction({ action: 'tap', x: 100, y: 200 });await driver.swipe(0, 500, 0, 100);await driver.setValue('input[name="username"]', 'myusername');Также WebdriverIO поддерживает работу с жестами, такими как pinch (сжатие), swipe (проведение) и tap (нажатие), что позволяет создавать более сложные сценарии взаимодействия с мобильными приложениями.
Для эффективного тестирования мобильных приложений важно уметь отлаживать тесты и анализировать результаты. WebdriverIO поддерживает несколько способов вывода отчетов, включая интеграцию с Mocha, Jasmine и другими фреймворками.
Также можно использовать Appium logs для диагностики работы мобильного приложения. Эти логи содержат подробную информацию о взаимодействии с приложением, ошибки и другие важные сообщения, которые могут быть полезны для отладки.
Несмотря на мощность WebdriverIO и Appium, существует несколько ограничений при тестировании мобильных приложений:
WebdriverIO в сочетании с Appium предоставляет мощные инструменты для автоматизации тестирования мобильных приложений. Благодаря этому подходу можно создавать стабильные и эффективные тесты для нативных приложений на Android и iOS. Несмотря на наличие некоторых ограничений, этот стек инструментов остаётся одним из самых популярных и удобных для тестирования мобильных приложений в рамках автоматизации QA-процессов.