跳至主要内容

Android

Playwright 对 Android 自动化提供**实验性**支持。这包括 Chrome for Android 和 Android WebView。

要求

  • Android 设备或 AVD 模拟器。
  • ADB 守护程序 正在运行并已通过您的设备进行身份验证。通常,运行 adb devices 就足够了。
  • Chrome 87 或更高版本安装在设备上
  • chrome://flags 中启用“在非 ROOT 设备上启用命令行”。

已知限制

  • 尚不支持原始 USB 操作,因此您需要 ADB。
  • 设备需要处于唤醒状态才能生成屏幕截图。启用“保持唤醒”开发者模式将有所帮助。
  • 我们没有对设备运行所有测试,因此并非所有功能都正常工作。

如何运行

Android 自动化脚本示例如下

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

(async () => {
// Connect to the device.
const [device] = await android.devices();
console.log(`Model: ${device.model()}`);
console.log(`Serial: ${device.serial()}`);
// Take screenshot of the whole device.
await device.screenshot({ path: 'device.png' });

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

// Launch an application with WebView.
await device.shell('am force-stop org.chromium.webview_shell');
await device.shell('am start org.chromium.webview_shell/.WebViewBrowserActivity');
// Get the WebView.
const webview = await device.webView({ pkg: 'org.chromium.webview_shell' });

// Fill the input box.
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');

// Work with WebView's page as usual.
const page = await webview.page();
await page.waitForNavigation({ url: /.*microsoft\/playwright.*/ });
console.log(await page.title());
}

{
// --------------------- Browser -----------------------

// Launch Chrome browser.
await device.shell('am force-stop com.android.chrome');
const context = await device.launchBrowser();

// Use BrowserContext as usual.
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();
}

// Close the device.
await device.close();
})();

方法

连接

新增于:v1.28 android.connect

此方法将 Playwright 附加到现有的 Android 设备。使用 android.launchServer() 启动新的 Android 服务器实例。

用法

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

参数

  • wsEndpoint 字符串#

    要连接到的浏览器 WebSocket 端点。

  • options 对象 (可选)

    • headers 对象<字符串, 字符串> (可选)#

      要与 WebSocket 连接请求一起发送的其他 HTTP 标头。可选。

    • slowMo 数字 (可选)#

      以指定的毫秒数降低 Playwright 操作速度。有助于查看正在发生的事情。默认为 0

    • timeout 数字 (可选)#

      等待建立连接的最长时间(以毫秒为单位)。默认为 30000(30 秒)。传递 0 以禁用超时。

返回值


设备

新增于:v1.9 android.devices

返回检测到的 Android 设备列表。

用法

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

参数

  • options 对象 (可选)
    • host 字符串 (可选)新增于:v1.22#

      用于建立 ADB 服务器连接的可选主机。默认为 127.0.0.1

    • omitDriverInstall 布尔值 (可选)新增于:v1.21#

      防止在附加时自动安装 Playwright 驱动程序。假设驱动程序已安装。

    • port 数字 (可选)新增于:v1.20#

      用于建立 ADB 服务器连接的可选端口。默认为 5037

返回值


启动服务器

新增于:v1.28 android.launchServer

启动客户端可以连接到的 Playwright Android 服务器。请参阅以下示例

用法

服务器端

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

(async () => {
const browserServer = await _android.launchServer({
// If you have multiple devices connected and want to use a specific one.
// 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 对象 (可选)
    • adbHost 字符串 (可选)#

      用于建立 ADB 服务器连接的可选主机。默认为 127.0.0.1

    • adbPort 数字 (可选)#

      用于建立 ADB 服务器连接的可选端口。默认为 5037

    • deviceSerialNumber 字符串 (可选)#

      用于在其中启动浏览器的可选设备序列号。如果未指定,则在连接多个设备时将抛出错误。

    • host 字符串 (可选)新增于:v1.45#

      用于 WebSocket 的主机。它是可选的,如果省略,则服务器将在未指定的 IPv6 地址 (::)(如果可用)或未指定的 IPv4 地址 (0.0.0.0)(否则)上接受连接。考虑使用选择特定接口来加强安全性。

    • omitDriverInstall 布尔值 (可选)#

      防止在附加时自动安装 Playwright 驱动程序。假设驱动程序已安装。

    • port 数字 (可选)#

      用于 WebSocket 的端口。默认为 0,选择任何可用的端口。

    • wsPath 字符串 (可选)#

      提供 Android 服务器的路径。出于安全考虑,这默认为一个不可猜测的字符串。

      警告

      任何了解 wsPath 的进程或网页(包括在 Playwright 中运行的进程或网页)都可以控制操作系统用户。因此,在使用此选项时,应使用不可猜测的令牌。

返回值


设置默认超时

新增于:v1.9 android.setDefaultTimeout

此设置将更改接受 超时 选项的所有方法的默认最长时间。

用法

android.setDefaultTimeout(timeout);

参数

  • timeout 数字#

    最长时间(以毫秒为单位)