跳到正文
云点iOS

选择器

选择器只负责造一个控件对象,不会立刻去查;真正的查找发生在调用 exists / click / getText / getRect 的时候。和 findElement 相比,它能取第几个、能找看不见的控件,但不带等待。

功能概览

  • ·选择器的名字和 findElement 的第一个参数一一对应
  • ·accessibilityId 最稳:不随界面语言和文案改版变化
  • ·xpath 灵活但慢,能用 classChain / predicate 就别用它

client.label#

按文字完全相等找控件。

typescript
client.label(value: string, visibleOnly?: boolean, index?: number): Element;

参数

参数名类型是否必填默认值描述
valuestring是—控件上的文字,要完全相等。
visibleOnlyboolean否true只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。
indexnumber否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、findElement

client.labelContains#

按文字包含找控件。

typescript
client.labelContains(value: string, visibleOnly?: boolean, index?: number): Element;

参数

参数名类型是否必填默认值描述
valuestring是—要包含的文字。
visibleOnlyboolean否true只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。
indexnumber否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;

参数

参数名类型是否必填默认值描述
valuestring是—控件的名字。在控制台的控件检查器里点一下控件就能看到。
visibleOnlyboolean否true只找看得见的控件。要连看不见的(被遮住、滚到屏幕外)一起找就传 false。
indexnumber否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;

参数

参数名类型是否必填默认值描述
valuestring是—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、client.predicate

client.classChain#

按 iOS 类链(class chain)找,比 XPath 快得多。

typescript
client.classChain(value: string, index?: number): Element;

参数

参数名类型是否必填默认值描述
valuestring是—类链表达式,例如 **/XCUIElementTypeCell[`label CONTAINS "通用"`]。
indexnumber否0命中多个时取第几个,从 0 数。

返回值

类型描述
Element控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。

示例

javascript
var cell = client.classChain('**/XCUIElementTypeButton[`label == "OK"`]');
if (cell.exists()) {
  cell.click();
}

参见 client.predicate、client.xpath

client.predicate#

按 NSPredicate 表达式找。

typescript
client.predicate(value: string, index?: number): Element;

参数

参数名类型是否必填默认值描述
valuestring是—谓词表达式,例如 label BEGINSWITH '确'、type == 'XCUIElementTypeButton' AND visible == true。
indexnumber否0命中多个时取第几个,从 0 数。

返回值

类型描述
Element控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。

示例

javascript
var btn = client.predicate('type == "XCUIElementTypeButton" AND label CONTAINS "Follow"');
if (btn.exists()) {
  btn.click();
}

参见 client.classChain

client.className#

按控件类型找,例如 XCUIElementTypeCell、XCUIElementTypeSwitch。

typescript
client.className(value: string, index?: number): Element;

参数

参数名类型是否必填默认值描述
valuestring是—控件类型名。
indexnumber否0命中多个时取第几个,从 0 数。

返回值

类型描述
Element控件对象。这时还没有去查,调用 exists / click / getText / getRect 时才真正查找。

示例

javascript
var firstCell = client.className('XCUIElementTypeCell', 0);
if (firstCell.exists()) {
  firstCell.click();
}

参见 client.predicate