UiObject对象
UiObject表示一个控件,可以通过这个对象获取到控件的属性,也可以对控件进行点击、长按等操作。
获取一个UiObject通常通过选择器的`findOne()`, `findOnce()`等函数,也可以通过UiCollection来获取,或者通过`UiObject.child()`, `UiObject.parent()`等函数来获取一个控件的子控件或父控件。
# 点击控件 |click
| 函数名 | 返回值 | 备注 |
| ---------------- | :----: | -------------------------------- |
| UiObject.click() | 布尔型 | 点击该控件,并返回是否点击成功。 |
> 如果该函数返回false,可能是该控件不可点击(clickable为false),当前界面无法响应该点击等。
# 长按该控件 |longClick
| 函数名 | 返回值 | 备注 |
| -------------------- | :----: | -------------------------------- |
| UiObject.longClick() | 布尔型 | 长按该控件,并返回是否点击成功。 |
> 如果该函数返回false,可能是该控件不可点击(longClickable为false),当前界面无法响应该点击等。
# 输入文本 |auto
| 函数名 | 返回值 | 备注 |
| ------------------ | :------: | ---------------------------------------------- |
| UiObject.setText() | 布尔型 | 设置输入框控件的文本内容,并返回是否设置成功。 |
| **参数名** | **类型** | |
| text | 字符串 | 文本 |
> 该函数只对可编辑的输入框(editable为true)有效。
# 复制文本 |copy
| 函数名 | 返回值 | 备注 |
| --------------- | :----: | ---------------------------------------------------- |
| UiObject.copy() | 布尔型 | 对输入框文本的选中内容进行复制,并返回是否操作成功。 |
> 该函数只能用于输入框控件,并且当前输入框控件有选中的文本。可以通过`setSelection()`函数来设置输入框选中的内容。
```
var et = className("EditText").findOne();
//选中前两个字
et.setSelection(0, 2);
//对选中内容进行复制
if(et.copy()){
toast("复制成功");
}else{
toast("复制失败");
}
```
# 剪切文本 |cut
| 函数名 | 返回值 | 备注 |
| -------------- | :----: | ---------------------------------------------------- |
| UiObject.cut() | 布尔型 | 对输入框文本的选中内容进行剪切,并返回是否操作成功。 |
> 该函数只能用于输入框控件,并且当前输入框控件有选中的文本。可以通过`setSelection()`函数来设置输入框选中的内容。
# 粘贴文本 |paste
| 函数名 | 返回值 | 备注 |
| ---------------- | :----: | ------------------------------------------------------------ |
| UiObject.paste() | 布尔型 | 对输入框控件进行粘贴操作,把剪贴板内容粘贴到输入框中,并返回是否操作成功。 |
```
//设置剪贴板内容为“你好”
setClip("你好");
var et = className("EditText").findOne();
et.paste();
```
# 替换文本 |setSelection
| 函数名 | 返回值 | 备注 |
| ----------------------- | :------: | ---------------------------------------------------- |
| UiObject.setSelection() | 布尔型 | 对输入框控件设置选中的文字内容,并返回是否操作成功。 |
| **参数名** | **类型** | |
| start | 整数型 | 选中内容起始位置 |
| end | 整数型 | 选中内容结束位置(不包括) |
> 索引是从0开始计算的;并且,选中内容不包含end位置的字符。例如,如果一个输入框内容为"123456789",要选中"4567"的文字的代码为`et.setSelection(3, 7)`。
>
> 该函数也可以用来设置光标位置,只要参数的end等于start,即可把输入框光标设置在start的位置。例如`et.setSelection(1, 1)`会把光标设置在第一个字符的后面。
# 向前滑动 |scrollForward
| 函数名 | 返回值 | 备注 |
| ------------------------ | :----: | ---------------------------------------------- |
| UiObject.scrollForward() | 布尔型 | 对控件执行向前滑动的操作,并返回是否操作成功。 |
> 向前滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行`scrollForward()`的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)。
# 向后滑动 |scrollBackward
| 函数名 | 返回值 | 备注 |
| ------------------------- | :----: | ---------------------------------------------- |
| UiObject.scrollBackward() | 布尔型 | 对控件执行向后滑动的操作,并返回是否操作成功。 |
> 向后滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行`scrollForward()`的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)。
# 控件选中 |select
| 函数名 | 返回值 | 备注 |
| ----------------- | :----: | ------------------------------------------------------------ |
| UiObject.select() | 布尔型 | 对控件执行"选中"操作,并返回是否操作成功。"选中"和`isSelected()`的属性相关,但该操作十分少用。 |
# 控件折叠 |collapse
| 函数名 | 返回值 | 备注 |
| ------------------- | :----: | ---------------------------------------- |
| UiObject.collapse() | 布尔型 | 对控件执行折叠操作,并返回是否操作成功。 |
# 控件执行 |expand
| 函数名 | 返回值 | 备注 |
| ----------------- | :----: | ------------------------------------ |
| UiObject.expand() | 布尔型 | 对控件执行操作,并返回是否操作成功。 |
# 控件执行显示 |show
| 函数名 | 返回值 | 备注 |
| --------------- | :----: | ------------------------------------------------------ |
| UiObject.show() | 布尔型 | 对集合中所有控件执行显示操作,并返回是否全部操作成功。 |
# 控件向上滑 |scrollUp
| 函数名 | 返回值 | 备注 |
| ------------------- | :----: | ---------------------------------------------------------- |
| UiObject.scrollUp() | 布尔型 | 对集合中所有控件执行向上滑的操作,并返回是否全部操作成功。 |
# 控件向下滑 |scrollDown
| 函数名 | 返回值 | 备注 |
| --------------------- | :----: | ---------------------------------------------------------- |
| UiObject.scrollDown() | 布尔型 | 对集合中所有控件执行向下滑的操作,并返回是否全部操作成功。 |
# 控件向左滑 |scrollLeft
| 函数名 | 返回值 | 备注 |
| --------------------- | :----: | ---------------------------------------------------------- |
| UiObject.scrollLeft() | 布尔型 | 对集合中所有控件执行向左滑的操作,并返回是否全部操作成功。 |
# 控件向右滑 |scrollRight
| 函数名 | 返回值 | 备注 |
| ---------------------- | :----: | ---------------------------------------------------------- |
| UiObject.scrollRight() | 布尔型 | 对集合中所有控件执行向右滑的操作,并返回是否全部操作成功。 |
# 获取所有子控件 |children
| 函数名 | 返回值 | 备注 |
| ---------- | :----------: | -------------------------------------- |
| children() | UiCollection | 返回该控件的所有子控件组成的控件集合。 |
可以用于遍历一个控件的子控件,例如:
```
className("AbsListView").findOne().children()
.forEach(function(child){
log(child.className());
});
```
# 获取所有子控件数量 |childCount
| 函数名 | 返回值 | 备注 |
| ------------ | :----: | ---------------- |
| childCount() | 整数型 | 返回子控件数目。 |
# 获取子控件 |child
| 函数名 | 返回值 | 备注 |
| ---------- | :------: | --------------------------------------------------------- |
| child() | UiObject | 返回第i+1个子控件。如果i>=控件数目或者小于0,则抛出异常。 |
| **参数名** | **类型** | |
| i | 整数型 | 子控件索引 |
需要注意的是,由于布局捕捉的问题,该函数可能返回`null`,也就是可能获取不到某个子控件。
遍历子控件的示例:
```
var list = className("AbsListView").findOne();
for(var i = 0; i < list.childCount(); i++){
var child = list.child(i);
log(child.className());
}
```
# 获取父控件 |parent
| 函数名 | 返回值 | 备注 |
| -------- | :------: | ------------------------------------------------------ |
| parent() | UiObject | 返回该控件的父控件。如果该控件没有父控件,返回`null`。 |
# 获取控件在屏幕范围 |bounds
| 函数名 | 返回值 | 备注 |
| -------- | :----: | -------------------------------------------- |
| bounds() | Rect | 返回控件在屏幕上的范围,其值是一个Rect对象。 |
示例:
```
var b = text("Auto.js").findOne().bounds();
toast("控件在屏幕上的范围为" + b);
```
如果一个控件本身无法通过`click()`点击,那么我们可以利用`bounds()`函数获取其坐标,再利用坐标点击。例如:
```
var b = desc("打开侧拉菜单").findOne().bounds();
click(b.centerX(), b.centerY());
//如果使用root权限,则用 Tap(b.centerX(), b.centerY());
```
# 获取控件在父控件范围 |boundsInParent
| 函数名 | 返回值 | 备注 |
| ---------------- | :----: | ---------------------------------------------- |
| boundsInParent() | Rect | 返回控件在父控件中的范围,其值是一个Rect对象。 |
# 获取控件在父控件次序 |drawingOrder
| 函数名 | 返回值 | 备注 |
| -------------- | :----: | ------------------------------ |
| drawingOrder() | 整数型 | 返回控件在父控件中的绘制次序。 |
> 该函数在安卓7.0及以上才有效,7.0以下版本调用会返回0。
# 获取控件id |id
| 函数名 | 返回值 | 备注 |
| ------ | :----: | ------------------------------------------------ |
| id() | 字符串 | 获取控件的id,如果一个控件没有id,则返回`null`。 |
# 获取控件的文本 |text
| 函数名 | 返回值 | 备注 |
| ------ | :----: | -------------------------------------------- |
| text() | 字符串 | 获取控件的文本,如果控件没有文本,返回`""`。 |
# 文本查找子孙控件 |findByText
| 函数名 | 返回值 | 备注 |
| ------------ | :----------: | ------------------------------------------------------------ |
| findByText() | UiCollection | 根据文本text在子控件中递归地寻找并返回文本或描述(desc)**包含**这段文本str的控件,返回它们组成的集合。 |
| **参数名** | **类型** | |
| str | 字符串 | 文本 |
该函数会在当前控件的子控件,孙控件,曾孙控件...中搜索text或desc包含str的控件,并返回它们组合的集合。
# 选择器查找子孙控件 |findOne
| 函数名 | 返回值 | 备注 |
| ---------- | :--------: | ------------------------------------------------------------ |
| findOne() | UiOobject | 根据选择器selector在该控件的子控件、孙控件...中搜索符合该选择器条件的控件,并返回找到的第一个控件;如果没有找到符合条件的控件则返回`null`。 |
| **参数名** | **类型** | |
| selector | UiSelector | 选择器 |
例如,对于酷安动态列表,我们可以遍历他的子控件(每个动态列表项),并在每个子控件中依次寻找点赞数量和图标,对于点赞数量小于10的点赞:
```
//找出动态列表
var list = id("recycler_view").findOne();
//遍历动态
list.children().forEach(function(child){
//找出点赞图标
var like = child.findOne(id("feed_action_view_like"));
//找出点赞数量
var likeCount = child.findOne(id("text_view"));
//如果这两个控件没有找到就不继续了
if(like == null || likeCount == null){
return;
}
//判断点赞数量是否小于10
if(parseInt(likeCount.text()) < 10){
//点赞
like.click();
}
});
```
# 选择器遍历子孙控件 |find
| 函数名 | 返回值 | 备注 |
| ---------- | :----------: | ------------------------------------------------------------ |
| find() | UiCollection | 根据选择器selector在该控件的子控件、孙控件...中搜索符合该选择器条件的控件,并返回它们组合的集合。 |
| **参数名** | **类型** | |
| selector | UiSelector | 选择器 |