应用与会话
打开、切换、结束 App,以及查询 App 的状态。打开和切换都用 client.session —— 它同时负责建立自动化会话。
client.session#
打开(或切到)这个 App,并为它建立自动化会话。一般在脚本开头调用。
typescript
client.session(bundleId: string): Client;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
bundleId | string | 是 | — | App 的 Bundle ID,例如 com.apple.Preferences(设置)。 |
返回值
| 类型 | 描述 |
|---|---|
Client | 绑定到新会话的客户端。一般不用接:之后直接用全局的 client,它会自动跟上当前会话。 |
注意事项
- 设备锁屏时会先解锁(只对没有锁屏密码的设备有效)。
示例
javascript
client.session('com.apple.Preferences');
sleep(2);
clickElement('label', '通用', 5);client.appTerminate#
结束 App 的进程。想让每一轮都从 App 的初始状态开始,就先结束再 client.session 打开。
typescript
client.appTerminate(bundleId: string): object;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
bundleId | string | 是 | — | App 的 Bundle ID,例如 com.apple.Preferences(设置)。 |
返回值
| 类型 | 描述 |
|---|---|
object | WDA 的原始响应,一般用不到。 |
示例
javascript
client.appTerminate('com.zhiliaoapp.musically');
sleep(randomFloat(1, 2));
client.session('com.zhiliaoapp.musically');client.appState#
查询 App 的运行状态。
typescript
client.appState(bundleId: string): { value: number };参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
bundleId | string | 是 | — | App 的 Bundle ID,例如 com.apple.Preferences(设置)。 |
返回值
| 类型 | 描述 |
|---|---|
{ value: number } | value 是状态:1 未运行,2 在后台挂起,3 在后台运行,4 在前台。 |
示例
javascript
var state = client.appState('com.zhiliaoapp.musically');
if (state.value !== 4) {
client.session('com.zhiliaoapp.musically');
}client.appCurrent#
当前在前台的 App 的信息。
typescript
client.appCurrent(): { bundleId: string; name: string; pid: number };返回值
| 类型 | 描述 |
|---|---|
{ bundleId, name, pid } | 前台 App 的 Bundle ID、名字和进程号。 |
示例
javascript
var app = client.appCurrent();
logi(app.bundleId);isAppInstalled#
这台设备上装没装某个 App。
typescript
isAppInstalled(bundleId: string): boolean;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
bundleId | string | 是 | — | App 的 Bundle ID,例如 com.apple.Preferences(设置)。 |
返回值
| 类型 | 描述 |
|---|---|
boolean | 装了返回 true(不管开没开),没装返回 false。 |
异常
| 异常类型 | 触发条件 |
|---|---|
WDAErrorINVALID_ARGUMENT | bundleId 没写或不是文字。 |
注意事项
- 查不了(比如设备上的自动化服务没响应)会报错,不会当成「没装」返回 false,免得脚本走错分支。
示例
javascript
if (!isAppInstalled('com.zhiliaoapp.musically')) {
loge('TikTok is not installed');
return false;
}
client.session('com.zhiliaoapp.musically');appList#
现在正在运行的 App(前台和后台)。不是「装了哪些 App」,问装没装用 isAppInstalled。
typescript
appList(): { pid: number; bundleId: string }[];返回值
| 类型 | 描述 |
|---|---|
{ pid, bundleId }[] | 每个运行中的 App 的进程号和 Bundle ID。 |
示例
javascript
var apps = appList();
for (var i = 0; i < apps.length; i++) {
logi(apps[i].bundleId);
}