# 获取页面信息

通过此函数可以查看到 当前页面的名称,包名,所属应用等信息


# getPageInfo() 页面信息

--案例:
local info =  getPageInfo();
if info then 
    print(info.name);-- 当前应用名称
    print(info.packageName);-- 当前应用的id
    print(info.activity);--当前页面的名称
end

1
2
3
4
5
6
7
8

# 检索模式

 切换 view 的节点树 有简洁模式和复杂模式

# mode() 切换模式

可通过此命令来切换View 的检索模式,模式会影响辅助和view树检索工具

参数

  • 参数1 |必填number类型 :
    • 0 简洁模式(保留了重要的节点(默认)但会遗漏部分节点。)
    • 1 完整模式(所有节点都会存在,但层级嵌套很深较复杂。)
--案例:
mode(0);-- 切换为简洁模式
-- mode(1);-- 切换为复杂模式
1
2
3

# 检索节点

通过命令组合,可以查找到设备上的控件信息,从来来辅助脚本运行。

# find() 检索一个节点

视频教程 (opens new window) 该命令只会检索出一个节点结果来

参数

--案例:
local rule = R():id("com.freespace.aplug:id/tv_title_ip");
local view = find(rule);
if view then
        print(view.text);     -- 节点的文本 string
        print(view.id);       -- 节点的id string
        print(view.desc);     -- 节点的描述 string
        print(view.isClick)   -- 节点是否可点击 boolean
        print(view.type)      -- 节点类型 string
        print(view.isChecked) -- 节点是否被勾选|选中 boolean
        print(view.childCount)-- 节点包含的子控件个数 number
        print(view.rect.left..','..view.rect.top..','..view.rect.right..','..view.rect.bottom);
        -- 节点在屏幕上显示的区域 table 前两位区域左上角坐标,后两位区域右下角坐标
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# finds() 检索一组节点

视频教程 (opens new window) 该命令会检索出所有符合条件的节点结果来

参数

--案例:
local rule = R():type("TextView"):text(".*设备.*");
local views = finds(rule);
for k,view in pairs(views) do
     print("第"..k.."个控件")
     print(view.text);     -- 节点的文本 string
     print(view.id);       -- 节点的id string
     print(view.desc);     -- 节点的描述 string
     print(view.isClick)   -- 节点是否可点击 boolean
     print(view.type)      -- 节点类型 string
     print(view.isChecked) -- 节点是否被勾选|选中 boolean
     print(view.childCount)-- 节点包含的子控件个数 number
     print(view.rect.left..','..view.rect.top..','..view.rect.right..','..view.rect.bottom);
     -- 节点在屏幕上显示的区域 table 前两位区域左上角坐标,后两位区域右下角坐标
end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 检索规则

检索规则,类似一条搜索语句,配合find,finds 可以检索出界面的控件信息。

# R() 创建检索规则

建一个检索命令,检索命令支持链式编程增加规则内容 "R 为 Rule的简写,代表了 规则"

--案例:
R();
1
2

# :text() 文本-检索

视频教程 (opens new window) 根据文本检索界面上的控件

参数

--案例:
R():text("退出"); -- 找出文本为退出的控件

--正则案例:
-- R():text(".*退出.*"); -- 找出包含退出的控件
1
2
3
4
5

# :id() ID-检索

视频教程 (opens new window) 根据id检索界面上的控件
某些App ID 是动态的,所以某些App id不利于全分辨率兼容(一般Appid 是完整单词的为静态id,如果是乱拼字母的,请谨慎使用id)

参数

--案例:
R():id("com.touchscrip/id123");
1
2

# :type() 类型-检索

视频教程 (opens new window) 根据控件类型来检索界面上的控件

参数

  • 参数1 必填 | string类型 : 要检索的控件类型 “支持正则表达式”
    • 常用的节点类型:
    • TextView 文本类型
    • EditText 输入框
    • Button 按钮
    • ImageView 图片类型
    • LinerLayout 线性布局
    • Relevlayout 相对布局
    • FrameLayout 帧布局
--案例:
R():type("TextView");
1
2

# :desc() 描述-检索

视频教程 (opens new window) 根据描述来检索界面上的控件

参数

-- 案例:
R():desc("你好")

-- 正则案例:
-- R():desc(".*你好.*")
1
2
3
4
5

# :childCount() 子节点数量-检索

视频教程 (opens new window) 根据子控件的个数来检索控件

参数

--案例:
R():childCount(3)
1
2

# :name() 包名-检索

视频教程 (opens new window) 通过包名匹配控件(通常包名为当前打开应用的包名)
可用此函数来判断是否已经切换到某个app

参数

-- 案例:
R():name("com.freespace.aplug");
1
2

# :path() 路径-检索

  • :path(s)

视频教程 (opens new window) 通过路径 来匹配控件,此'路径' 含义:从根节点到当前节点所有的嵌套路径
建议多使用此函数,App 的层级不变,利于全分辨率兼容。
建议和 name检索配合使用

参数

--案例
R():path("/FrameLayout/LinerLayout/TextView");
1
2

# :hasChild() 子节点条件-检索

视频教程 (opens new window) 通过约定 子控件需要满足的规则,来查找控件

参数

--案例:
R():hasChild( R():text("123") );
1
2

# :screen() 屏幕范围-检索

视频教程 (opens new window) 根据屏幕显示范围 来检索控件

参数

  • 参数1 必填 | number类型 : 屏幕的显示规则
    • 0 = 不限制是否在屏幕范围内。
    • 1 = 控件在屏幕中有显示
    • 2 = 控件不在屏幕中时生效
-- 案例:
R():screen(0|1|2) -- 0,1,2 只能选填一个
1
2

# :page() 页面检索

创建一个规则,指定查找控件的所属页面

参数

  • 参数1 必填 | string类型 : 指定要检索控件的所属页面,可用节点树工具查看
-- 案例:
R():page:("sss"); -- 检索出page为sss的控件
1
2

# :target() 执行目标-定位

创建一个规则,找到一批控件时,精准点击某一个
通常 配合 click,slid 函数使用

参数

-- 案例:
R():id("ttv"):target(1); -- 检索出所有id为'ttv' 的控件,当执行动作(点击|滑动)时候,只执行到第一个控件。
1
2

# :getParent() 获取父节点

  • :getParent(n)

获取当前检测到节点的父节点,可获取(爷爷,太爷爷,太太爷爷 ...节点)

参数

  • 参数1 可选 | number类型 : 第几个父亲节点
    • 不传参数 默认获取第一个父节点
    • 1=父节点,2=爷爷节点,3=太爷爷节点,4...(依次往上推)
-- 案例:
R():text("QQ"):getParent(); --找到文本为QQ的节点,并获取该节点的父节点
1
2

# :getBrother() 获取兄弟节点

获取当前检测到节点的 兄弟节点 (大哥,二哥,三哥,5弟,6弟,,,老幺)

参数

  • 参数1 可选 | number类型 : 第几个兄弟控件
    • 不传参数 默认获取同一个父节点下的 第一个节点
    • -1=父元素下的最后一个控件(负数倒序)
    • 1=父元素下的第一个控件
    • 2=父元素下的第二个控件
    • 3=父元素下的第三个控件
    • 4...更多
-- 案例:
R():type("LinearLayout"):getBrother(); --获取 类型为LinerLayout的控件,并获取兄弟节点的 大哥(第一个控件)

-- 获取 类型为LinerLayout的控件,并获取兄弟节点中的第三个控件
R():text("LinearLayout"):getBrother(3);

-- 获取 类型为LinerLayout的控件,并获取兄弟节点中的倒数第二个控件
R():text("LinearLayout"):getBrother(-2);

1
2
3
4
5
6
7
8
9

# :getBrothers() 所有兄弟节点

获取当前节点的所有兄弟节点

-- 案例:
R():text("LinearLayout"):getBrothers(); --获取 类型为LinerLayout的节点,并获取该节点的所有兄弟节点
1
2

# :getChild() 获取子节点

获取当前检测到节点 子节点

参数

  • 参数1 可选 | number类型 : 第几个孩子控件
    • 不穿参数 默认获取第一个孩子控件
    • 1=第一个子控件
    • 2=第二个子控件
    • 3=第三个子控件
    • 4...更多
-- 案例
R():type("LinearLayout"):getChild(); --获取 类型为LinerLayout的节点,并获取第一个孩子节点


R():text("LinearLayout"):getChild(3); --获取 类型为LinerLayout的节点,并获取第三个孩子节点
1
2
3
4
5

# :getChilds() 所有子节点

  • :getChilds()

获取当前节点的所有子节点

-- 案例
R():text("LinearLayout"):getChilds(); --获取 类型为LinerLayout的节点,并获取该节点的所有子节点
1
2

# 组合写法

R():id():text(""):desc()....

视频教程 (opens new window) 可以把多个检索条件组合起来,进行精准检索

-- 案例:
R():text("你好"):type("TextView"):childCount(3); 
-- 查找 text为'你好'并且 类型为 'TextView' 并且 子节点个数为'3' 的所有节点
1
2
3