在自动化脚本中如何高效设置文本,粘贴文本

a
Jan 3, 2025, 9:34:52 AM

我们在编写自动化脚本过程中经常遇到需要设置文本的场景,最常见的就是输入文本然后搜索,就这看似简单的任务,有时候却变得比较困难,因为有的app搜索文本框不是android.widget.EditText控件,甚至有的根本就不是android控件,下面介绍基于冰狐智能辅助平台的设置文本,粘贴文本的完美解决方案。

一、目标控件是android.widget.EditText控件

目标是标准的EditText控件时最简单,只需要调用paste函数将文本粘贴进去即可,注意只有EditText及其子控件才可以使用paste函数。冰狐的ui树如下:


代码如下:注意:如果设置不成功,请尝试type:'paste',或者先点击选中EditText控件然后再调用paste函数。

function main() {
    paste('cn:android.widget.EditText', '玩具', {type: 'set'});
}

二、目标控件不是EditText,是View、TextView或者其他Android控件

如果目标控件不是EditText,就不能直接使用paste函数。此时我们可以使用先把文本复制到系统粘贴板,然后再长按控件弹出菜单,点击粘贴按钮把文本自动输入到目标控件中。

function main() {
    // 把数据放到系统粘贴板
    setClipboardData('水果');

    // 假定目标控件的文本为“搜索我的订单”,这里你可以根据实际情况填。长按弹出粘贴按钮。如果没有弹出可以先点击一下目标控件,再长按。
    click('txt:搜索我的订单', {isLongClick: true, afterWait: 1000});

    // 点击粘贴按钮,注意root必须填粘贴,因为通常情况下粘贴按钮和当前的界面不是同一个窗口
    click('txt:粘贴', {root: 'txt:粘贴'});
}

三、目标界面是一个自定义界面,没有任何android控件

目标界面用ui树抓不到控件,因为该界面大概率是完全自绘制的界面没有用到任何标准Android控件,此时前面两种方法都不能用。正确流程是,先用ocr间接找到目标控件所在的位置,然后,长按弹出粘贴按钮,点击粘贴把文本输入到目标控件




代码如下:

function main() {
    requestScreenShot();

    // 把粘贴的数据放到系统粘贴板
    setClipboardData('水果')

    // 用ocr找到目标控件,如果目标控件没有文本,可以查找其旁边的“搜索按钮”,然后加偏移定位目标控件
    var ret = ocrFindView('txt*:我的订单')
    if (ret.length > 0) {
        console.log('找到控件:', ret)
        // 长按弹出粘贴按钮,duration设置为800表示长按
        gestureClick(parseInt(ret.region[0] + ret.region[2] / 2), parseInt(ret.region[1] + ret.region[3] / 2), {duration: 800, afterWait: 1000})

        // 点击粘贴按钮粘贴文本
        click('txt:粘贴', {root:'txt:粘贴', click: true})
    }
}

四、总结

本文介绍了三种在自动化脚本中实现设置文本粘贴文本的方法,基本覆盖了设置文本的所有场景,demo代码可以直接用于实际工程,非常实用,有任何问题,请评论区留言

发表评论
最新评论
商务合作QQ:3765323427
Copyright © 2021-2024 冰狐智能辅助. All rights reserved. 浙ICP备15043866号 《冰狐智能辅助服务协议》