控件模块
注意事项(必看)
此函数仅支持安卓V5.0 及以上系统
需使用触摸精灵安卓版本 V6.5 及以上版本
vscode触摸精灵插件 V2.5.0 及以上版本
使用此函数需打开无障碍权限,开触摸精灵 设置 -> 无障碍权限 将触摸精灵设置为开启
如此函数失效请尝试重启无障碍开关,或者重启手机,重新安装触摸精灵
使用教程
使用vscode获取控件信息
1.在触摸精灵插件的设备列表中点击右键,选择控件抓抓
2.点击获取布局获取当前屏幕信息
3.点击控件查看控件信息
4.选择控件信息生成代码
控件函数
控件函数: widget.find 查找控件
函数说明 : 根据属性组合查找控件
函数方法 : widget.find(condition);
返回值 : wid 对象
condition为一个table组合,支持以下参数
参数 | 类型 | 说明 | 默认值 |
---|---|---|---|
id | string | 控件ID | |
text | string | 控件文本 | |
type | string | 控件类型 | |
desc | string | 控件描述 | |
path | string | 控件路径 | |
regex | bool | id,text,type,desc,path参数是否是正则表达式.false: 比较的时候直接对比,true: 使用正则表达式匹配 | 默认为 false |
clickable | bool | 是否可点击 | |
longClickable | bool | 是否可长按 | |
scrollable | bool | 是否可滚动 | |
editable | bool | 是否可编辑 | |
checkable | bool | 是否可选中 | |
focusable | bool | 是否可聚集 | |
visible | bool | 是否可见 | |
which | number | 当多个结果匹配时返回第几个 | 默认为 1 |
返回值 | 类型 | 说明 |
---|---|---|
wid | object | 控件对象 或 nil |
返回的wid有如下属性:
对象属性 | 类型 | 说明 |
---|---|---|
id | string | 控件ID |
text | string | 控件文本 |
type | string | 控件类型 |
desc | string | 控件描述 |
path | string | 控件路径 |
clickable | bool | 是否可点击 |
longClickable | bool | 是否可长按 |
scrollable | bool | 是否可滚动 |
editable | bool | 是否可编辑 |
checkable | bool | 是否可选中 |
checked | bool | 是否选中 |
focusable | bool | 是否可聚集 |
focused | bool | 是否聚集 |
visible | bool | 是否可见 |
enabled | bool | 控件是否可用 |
selected | bool | 是否选择 |
children | number | 包含的子控件数 |
zIndex | number | 当前控件层级 |
packageName | string | 包名 |
region | table | 控件所在区域坐标,包含left,right,top,bottom四个属性 |
返回的wid有如下函数:
函数 | 参数 | 说明 |
---|---|---|
update() | 无 | 更新对象的属性 |
click() | 无 | 点击控件 |
longClick() | 无 | 长按控件 |
input() | text | 输入文字 |
forward() | 无 | 向前滚动 |
backward() | 无 | 向后滚动 |
示例: 通过id查找控件
function main()
local wid = widget.find(
{
id = "com.oneplus.dialer:id/tab_speed_dial",
}
)
if wid ~= nil then
sys.toast("控件已找到")
else
sys.toast("控件未找到")
end
end
示例: 通过多个条件查找控件
function main()
local wid = widget.find(
{
id = "com.oneplus.dialer:id/tab_speed_dial",
path = "/FrameLayout/FrameLayout/FrameLayout/FrameLayout/FrameLayout/RelativeLayout/FrameLayout/ViewGroup/FrameLayout",
regex = false,
clickable = true,
which = 1
}
)
if wid ~= nil then
sys.toast("控件已找到")
else
sys.toast("控件未找到")
end
end
示例: 正则匹配与点击控件
以触摸精灵设置界面为例,查找应用两字,匹配系统应用列表并点击
function main()
local wid = widget.find(
{
desc = ".*应用.*",
regex = true
}
)
if wid ~= nil then
--判断控件是否可以点击
if wid.clickable then
wid:click()
else
sys.toast("控件不支持点击")
end
else
sys.toast("控件未找到")
end
end
示例: 激活设备
此示例演示了控件查找,点击,输入功能
function main()
local t = {
{text = ".*注册状态.*", regex = true},
{text = "设备串号"},
{text = "注册"},
{type = "EditText"}
}
local code = "xxxxxxxxxx"
while true do
sys.sleep(1000)
--判断触摸精灵是否在前台
if app.frontBid() == "com.touchelf.app" then
if widget.find({text = "日志"}) then
for k, v in pairs(t) do
local wid = widget.find(v)
if wid ~= nil then
if wid.text == "注册状态" then
wid:click()
sys.sleep(1000)
elseif wid.text == "设备串号" then
key =
widget.find(
{
path = "/FrameLayout/LinearLayout/FrameLayout/LinearLayout/FrameLayout/ViewGroup/WebView/WebView/View/View/View/ListView/View/View",
which = 2
}
) --记录设备串号
widget.find({path = "/FrameLayout/LinearLayout/FrameLayout/LinearLayout/FrameLayout/ViewGroup/WebView/WebView/View/View/View/View/View/View/Button"}):click()
sys.sleep(1000)
elseif wid.text == "注册" then
wid:click()
sys.sleep(1000)
elseif wid.type == "EditText" then
sys.sleep(1000)
wid:input(code)
--输入激活码
sys.sleep(1000)
widget.find({text = "确定"}):click()
--点击确定按钮
sys.log("激活完成")
sys.log("设备串号:" .. key.text)
sys.log("激活码:" .. code)
script.stop()
end
end
end
else
local wid = widget.find({text = "设置"})
if wid ~= nil then
--判断控件是否可以点击
if wid.clickable then
wid:click()
sys.sleep(2000)
end
end
end
else
--不在前台启动触摸精灵
app.run("com.touchelf.app")
sys.sleep(5000)
end
end
end
注意:上述例子不一定在每个设备上都能正常使用.
例如触摸的设置两个字在不同的设备上控件信息有如下区别:请根据自己设备自行调试