选择器
选择器只负责造一个控件对象,不会立刻去查;真正的查找发生在调用 exists / click / getText / getRect 的时候。和 findElement 相比,它能取第几个、能找看不见的控件,但不带等待。
功能概览
- ·选择器的名字和 findElement 的第一个参数一一对应
- ·accessibilityId 最稳:不随界面语言和文案改版变化
- ·xpath 灵活但慢,能用 classChain / predicate 就别用它
client.label#
按文字完全相等找控件。
typescript
client.label(value: string, visibleOnly?: boolean, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 控件上的文字,要完全相等。 |
visibleOnly | boolean | 否 | true | 只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var ok = client.label('好');
if (ok.exists()) {
ok.click();
}
var second = client.label('关注', true, 1); // 第二个「关注」client.labelContains#
按文字包含找控件。
typescript
client.labelContains(value: string, visibleOnly?: boolean, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 要包含的文字。 |
visibleOnly | boolean | 否 | true | 只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var follow = client.labelContains('关注');
if (follow.exists()) {
follow.click();
}参见 client.label
client.accessibilityId#
按控件的名字(accessibilityIdentifier,开发者给控件起的)找。最稳的定位方式:不随界面语言和文案改版变化。
typescript
client.accessibilityId(value: string, visibleOnly?: boolean, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 控件的名字。在控制台的控件检查器里点一下控件就能看到。 |
visibleOnly | boolean | 否 | true | 只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var submit = client.accessibilityId('submit_button');
if (submit.exists()) {
submit.click();
}参见 findElement
client.xpath#
按 XPath 找。灵活但慢:要把整棵控件树序列化以后再查,复杂界面上能慢到秒级。
typescript
client.xpath(value: string): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | XPath 表达式。命中多个取第一个;要第 n 个写成 (//表达式)[n]。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
注意事项
- 能用 classChain 或 predicate 表达的,就别用 XPath。
示例
javascript
var btn = client.xpath('//XCUIElementTypeButton[@name="OK"]');
if (btn.exists()) {
btn.click();
}client.classChain#
按 iOS 类链(class chain)找,比 XPath 快得多。
typescript
client.classChain(value: string, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 类链表达式,例如 **/XCUIElementTypeCell[`label CONTAINS "通用"`]。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var cell = client.classChain('**/XCUIElementTypeButton[`label == "OK"`]');
if (cell.exists()) {
cell.click();
}client.predicate#
按 NSPredicate 表达式找。
typescript
client.predicate(value: string, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 谓词表达式,例如 label BEGINSWITH '确'、type == 'XCUIElementTypeButton' AND visible == true。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var btn = client.predicate('type == "XCUIElementTypeButton" AND label CONTAINS "Follow"');
if (btn.exists()) {
btn.click();
}client.className#
按控件类型找,例如 XCUIElementTypeCell、XCUIElementTypeSwitch。
typescript
client.className(value: string, index?: number): Element;参数
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
value | string | 是 | — | 控件类型名。 |
index | number | 否 | 0 | 命中多个时取第几个,从 0 数。 |
返回值
| 类型 | 描述 |
|---|---|
Element | 控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。 |
示例
javascript
var firstCell = client.className('XCUIElementTypeCell', 0);
if (firstCell.exists()) {
firstCell.click();
}