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Этот метод подключает Playwright к существующему устройству Android. Используйте android.launchServer() для запуска нового экземпляра сервера Android.
Использование
await android.connect(wsEndpoint);
await android.connect(wsEndpoint, options);
Аргументы
-
Веб-сокет конечная точка браузера для подключения.
-
options
Object (необязательно)-
headers
Object<string, string> (необязательно)#Дополнительные HTTP заголовки, которые будут отправлены с запросом на подключение веб-сокета. Необязательно.
-
slowMo
number (необязательно)#Замедляет операции Playwright на указанное количество миллисекунд. Полезно, чтобы вы могли видеть, что происходит. По умолчанию
0
. -
timeout
number (необязательно)#Максимальное время в миллисекундах для ожидания установления соединения. По умолчанию
30000
(30 секунд). Передайте0
, чтобы отключить тайм-аут.
-
Возвращает
devices
Добавлено в: v1.9Возвращает список обнаруженных устройств 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Запускает сервер 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 при подключении. Предполагается, что драйверы уже установлены.
-
Порт для использования для веб-сокета. По умолчанию 0, что выбирает любой доступный порт.
-
wsPath
string (необязательно)#Путь, по которому будет обслуживаться сервер Android. Для безопасности по умолчанию используется строка, которую трудно угадать.
warningЛюбой процесс или веб-страница (включая те, которые работают в Playwright), знающие о
wsPath
, могут взять под контроль пользователя ОС. По этой причине вы должны использовать строку, которую трудно угадать, при использовании этой опции.
-
Возвращает
setDefaultTimeout
Добавлено в: v1.9Эта настройка изменит максимальное время по умолчанию для всех методов, принимающих опцию timeout.
Использование
android.setDefaultTimeout(timeout);
Аргументы