控件模块

注意事项(必看)

此函数仅支持安卓V5.0 及以上系统
需使用触摸精灵安卓版本 V6.5 及以上版本
vscode触摸精灵插件 V2.5.0 及以上版本

使用此函数需打开无障碍权限,开触摸精灵 设置 -> 无障碍权限 将触摸精灵设置为开启
如此函数失效请尝试重启无障碍开关,或者重启手机,重新安装触摸精灵

使用教程

使用vscode获取控件信息

1.在触摸精灵插件的设备列表中点击右键,选择控件抓抓
image.png

2.点击获取布局获取当前屏幕信息
image.png

3.点击控件查看控件信息
image.png

4.选择控件信息生成代码
image.png

控件函数

控件函数: widget.find 查找控件

函数说明 : 根据属性组合查找控件
函数方法 : widget.find(condition);
返回值 : wid 对象

condition为一个table组合,支持以下参数

参数类型说明默认值
idstring控件ID
textstring控件文本
typestring控件类型
descstring控件描述
pathstring控件路径
regexboolid,text,type,desc,path参数是否是正则表达式.false: 比较的时候直接对比,true: 使用正则表达式匹配默认为 false
clickablebool是否可点击
longClickablebool是否可长按
scrollablebool是否可滚动
editablebool是否可编辑
checkablebool是否可选中
focusablebool是否可聚集
visiblebool是否可见
whichnumber当多个结果匹配时返回第几个默认为 1
返回值类型说明
widobject控件对象 或 nil

返回的wid有如下属性:

对象属性类型说明
idstring控件ID
textstring控件文本
typestring控件类型
descstring控件描述
pathstring控件路径
clickablebool是否可点击
longClickablebool是否可长按
scrollablebool是否可滚动
editablebool是否可编辑
checkablebool是否可选中
checkedbool是否选中
focusablebool是否可聚集
focusedbool是否聚集
visiblebool是否可见
enabledbool控件是否可用
selectedbool是否选择
childrennumber包含的子控件数
zIndexnumber当前控件层级
packageNamestring包名
regiontable控件所在区域坐标,包含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

注意:上述例子不一定在每个设备上都能正常使用.
例如触摸的设置两个字在不同的设备上控件信息有如下区别:请根据自己设备自行调试
image.png
image.png