Skip to main content

Android

Playwright имеет экспериментальную поддержку автоматизации Android. Это включает Chrome для Android и Android WebView.

Требования

  • Устройство Android или эмулятор AVD.
  • Запущенный и аутентифицированный демон ADB с вашим устройством. Обычно достаточно выполнить adb devices.
  • Установленный на устройстве Chrome 87 или более новой версии.
  • Включена опция "Enable command line on non-rooted devices" в chrome://flags.

Известные ограничения

  • Прямые операции с USB пока не поддерживаются, поэтому вам нужен ADB.
  • Устройство должно быть разбужено для создания скриншотов. Включение режима разработчика "Stay awake" поможет.
  • Мы не запускали все тесты на устройстве, поэтому не все функции могут работать.

Как запустить

Пример скрипта автоматизации для Android:

const { _android: android } = require('playwright');

(async () => {
// Подключение к устройству.
const [device] = await android.devices();
console.log(`Модель: ${device.model()}`);
console.log(`Серийный номер: ${device.serial()}`);
// Сделать скриншот всего устройства.
await device.screenshot({ path: 'device.png' });

{
// --------------------- WebView -----------------------

// Запуск приложения с WebView.
await device.shell('am force-stop org.chromium.webview_shell');
await device.shell('am start org.chromium.webview_shell/.WebViewBrowserActivity');
// Получить WebView.
const webview = await device.webView({ pkg: 'org.chromium.webview_shell' });

// Заполнить поле ввода.
await device.fill({
res: 'org.chromium.webview_shell:id/url_field',
}, 'github.com/microsoft/playwright');
await device.press({
res: 'org.chromium.webview_shell:id/url_field',
}, 'Enter');

// Работать с страницей WebView как обычно.
const page = await webview.page();
await page.waitForNavigation({ url: /.*microsoft\/playwright.*/ });
console.log(await page.title());
}

{
// --------------------- Браузер -----------------------

// Запуск браузера Chrome.
await device.shell('am force-stop com.android.chrome');
const context = await device.launchBrowser();

// Использовать BrowserContext как обычно.
const page = await context.newPage();
await page.goto('https://webkit.org/');
console.log(await page.evaluate(() => window.location.href));
await page.screenshot({ path: 'page.png' });

await context.close();
}

// Закрыть устройство.
await device.close();
})();

Методы

connect

Добавлено в: v1.28 android.connect

Этот метод подключает Playwright к существующему устройству Android. Используйте android.launchServer() для запуска нового экземпляра сервера Android.

Использование

await android.connect(wsEndpoint);
await android.connect(wsEndpoint, options);

Аргументы

  • wsEndpoint string#

    Веб-сокет конечная точка браузера для подключения.

  • options Object (необязательно)

    • headers Object<string, string> (необязательно)#

      Дополнительные HTTP заголовки, которые будут отправлены с запросом на подключение веб-сокета. Необязательно.

    • slowMo number (необязательно)#

      Замедляет операции Playwright на указанное количество миллисекунд. Полезно, чтобы вы могли видеть, что происходит. По умолчанию 0.

    • timeout number (необязательно)#

      Максимальное время в миллисекундах для ожидания установления соединения. По умолчанию 30000 (30 секунд). Передайте 0, чтобы отключить тайм-аут.

Возвращает


devices

Добавлено в: v1.9 android.devices

Возвращает список обнаруженных устройств Android.

Использование

await android.devices();
await android.devices(options);

Аргументы

  • options Object (необязательно)
    • host string (необязательно) Добавлено в: v1.22#

      Необязательный хост для установления соединения с сервером ADB. По умолчанию 127.0.0.1.

    • omitDriverInstall boolean (необязательно) Добавлено в: v1.21#

      Предотвращает автоматическую установку драйвера playwright при подключении. Предполагается, что драйверы уже установлены.

    • port number (необязательно) Добавлено в: v1.20#

      Необязательный порт для установления соединения с сервером ADB. По умолчанию 5037.

Возвращает


launchServer

Добавлено в: v1.28 android.launchServer

Запускает сервер Playwright Android, к которому могут подключаться клиенты. См. следующий пример:

Использование

Сторона сервера:

const { _android } = require('playwright');

(async () => {
const browserServer = await _android.launchServer({
// Если у вас подключено несколько устройств и вы хотите использовать конкретное.
// deviceSerialNumber: '<deviceSerialNumber>',
});
const wsEndpoint = browserServer.wsEndpoint();
console.log(wsEndpoint);
})();

Сторона клиента:

const { _android } = require('playwright');

(async () => {
const device = await _android.connect('<wsEndpoint>');

console.log(device.model());
console.log(device.serial());
await device.shell('am force-stop com.android.chrome');
const context = await device.launchBrowser();

const page = await context.newPage();
await page.goto('https://webkit.org/');
console.log(await page.evaluate(() => window.location.href));
await page.screenshot({ path: 'page-chrome-1.png' });

await context.close();
})();

Аргументы

  • options Object (необязательно)
    • adbHost string (необязательно)#

      Необязательный хост для установления соединения с сервером ADB. По умолчанию 127.0.0.1.

    • adbPort number (необязательно)#

      Необязательный порт для установления соединения с сервером ADB. По умолчанию 5037.

    • deviceSerialNumber string (необязательно)#

      Необязательный серийный номер устройства для запуска браузера. Если не указано, будет выдано исключение, если подключено несколько устройств.

    • host string (необязательно) Добавлено в: v1.45#

      Хост для использования для веб-сокета. Это необязательно, и если оно опущено, сервер будет принимать соединения на неопределенном IPv6 адресе (::), когда доступен IPv6, или на неопределенном IPv4 адресе (0.0.0.0) в противном случае. Рассмотрите возможность усиления безопасности, выбрав конкретный интерфейс.

    • omitDriverInstall boolean (необязательно)#

      Предотвращает автоматическую установку драйвера playwright при подключении. Предполагается, что драйверы уже установлены.

    • port number (необязательно)#

      Порт для использования для веб-сокета. По умолчанию 0, что выбирает любой доступный порт.

    • wsPath string (необязательно)#

      Путь, по которому будет обслуживаться сервер Android. Для безопасности по умолчанию используется строка, которую трудно угадать.

      warning

      Любой процесс или веб-страница (включая те, которые работают в Playwright), знающие о wsPath, могут взять под контроль пользователя ОС. По этой причине вы должны использовать строку, которую трудно угадать, при использовании этой опции.

Возвращает


setDefaultTimeout

Добавлено в: v1.9 android.setDefaultTimeout

Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.

Использование

android.setDefaultTimeout(timeout);

Аргументы

  • timeout number#

    Максимальное время в миллисекундах