连接
Total Control 安装好后,每台设备的首要任务就是建立 USB 连接,这个过程虽然繁琐,但也有两个方面非常重要:
为了获得adb权限,需要在“开发者选项”中打开“USB调试”,一旦与正确的adb设备驱动一起完成,Total Control就可以访问设备并利用adb安装“Total Control”将 App 和 NDK 软件导入设备。Windows 10 可以识别大部分安卓设备,Windows 7 和 XP 需要 adb 设备驱动,我们提供了一个通用的 adb 设备驱动,应该可以在大多数设备上使用,如果不能使用,您可能需要访问设备制造商网站下载 adb 设备驱动程序。
Total Control 自动检测 USB 设备的存在并要求确认连接,它提供了有关如何调出“开发人员选项”并为各种设备型号打开“USB 调试”的说明,在设置过程中,设备(不是 PC ) 可能会弹出一条消息以确认连接。通过 USB 建立连接是最难的部分,这是一次性设置,一旦出现“连接”按钮,您就已经正确安装了所有东西。单击“连接”按钮,您可能会看到一个设备窗口,通过屏幕上的说明测试它是否有效。
USB 连接建立后,软件已获得权限,您现在可以继续使用它或拔下 USB 并通过 WiFi 或以太网建立连接。
TCP 连接
一旦你有 USB 连接来打开设备窗口,设备已经获得 adb 权限,现在你可以拔下 USB 并选择使用 WiFi 或以太网(或其他具有 IP 地址的网络方式)。要通过 TCP 添加设备,请在主窗口中使用“+ 连接新设备”或“未找到设备,单击此处开始”,这将为您带来一个连接窗口。通过 TCP 连接有两种方式:
设备设置还支持 USB 和 TCP 的“自动连接”,它会自动连接并打开设备窗口。它不提供以太网自动连接,WiFi 自动连接允许设备检测接入点的存在,自动发现并连接到 TC。
只要设备被授予adb权限,TCP连接就可以非常强大,它允许TC连接/控制任何可达网络中的设备,通过VPN,它可以连接多个远程位置的设备。Total Control 8 添加了 TCP 分组,以便通过 TCP 连接多个设备。
屏幕投影
如果控制不是你关心的,你只是想投屏,在连接窗口中选择“投影”,它会显示二维码,与TCP连接一样,使用设备中的“全控”应用程序扫描二维码,如果是可达,会显示“连接”按钮,点击显示。此模式不允许用户控制设备。
视窗
Total Control 有两种模式,Windows 桌面模式 (WDM) 和多设备控制中心 (MDCC),MDCC 是完全不同的野兽,我们将在后面专门介绍。为简单起见,我们将在大部分章节中描述 WDM。
不同类型的窗口有几种类型和功能:
设备窗口
设备窗口将自动打开(自动连接)或单击连接窗口中的“连接”按钮。设备窗口由几个组件组成:
设备菜单
在设备窗口中单击 3 水平将弹出一个功能菜单:
设备设置
设备设置用于微调设备的行为方式,它有很多选项,其中大多数使用默认值运行良好:
屏幕设备设置
在保证屏幕传输的效率方面付出了很多努力,如何在不牺牲高 PC CPU (<10%) 的情况下保证 40-60 fps 的传输。在设备和 PC 上高效使用 GPU 至关重要,任何一侧没有 GPU 都会显着减慢镜像速度。我们还拥有自主开发的压缩 (SFC) 来处理没有 GPU 的设备。我们将在 PC 上执行图像压缩(H.264 或自制)、传输和解压缩和渲染,PC 必须处理多个设备。图像(质量 + 延迟)受许多因素的影响很大:每秒帧数、每帧数据大小(分辨率、质量)、USB 传输率、adb 传输率、设备和 PC 的 CPU/GPU。我们提供了许多参数进行调整。
解析度
Lite 版本提供 640p 分辨率,Pro 提供 4 种分辨率,我们将保持纵横比,调整大小在设备上完成。例如,4K 分辨率的设备对 PC 上的屏幕质量影响很小,但 1080p 会。1080p 将给设备和 PC 带来沉重负担(生成和移动更多数据)。
设备加速
有3种加速方式:
画面质量
我们通过调整 H.264 比特率提供 3 种图像质量:低、中和高,质量不会影响静态图像(如果图像不刷新,设备将传输高质量的静态图像),在动态图像中更明显。
[Adv] 设备编码设置
调整 H.264 配置文件以获得更高的图像质量,Android 需要基线配置文件,并非所有设备都支持其他配置文件。
[进阶] PC 加速
TC 已调整为使用 Intel i 系列 CPU/GPU,如果您有外部显卡,您可以调整 DirectX 或 OpenGL 是否提供更好的性能。通常 DirectX 就足够了。
[进阶] 硬件加速
对于HA1和HA2,它会让GPU一步完成解压和渲染。如果未选中此模式,它将执行解压缩 (GPU) 并渲染为 2 个不同的步骤(移动大量数据)。
系统设置
系统设置是适用于所有设备的设置。它可以通过主窗口设置或设备设置⇒系统设置访问。它由左侧的主题和右侧的详细设置组成,您可以右键单击左侧的标题滚动。它包含以下设置:
西格玛键盘
其他选项
屏幕截图、视频录制 - 请参阅屏幕截图和视频录制。
Capture PC – 请参阅复制粘贴和文件传输。
复制 - 请参阅复制粘贴和文件传输。
Boss Key - 可以定义一个功能键来关闭 Windows 系统托盘中的所有设备窗口。
屏幕控制模式 - 查看动作,单击并滑动。
adb/adb2 - adb2 比 adb 更新更快,如果在 adb2 上遇到问题,可以切换到 adb。
设备自动睡眠 - 默认情况下,TC 将保持设备屏幕始终打开,选中此选项以使用设备显示超时设置。
备份 - 联系人、消息和通话记录的备份和恢复路径。
每秒帧数 - 显示每秒帧数。
Show Coordinates – 显示鼠标光标相对于设备屏幕的绝对和相对坐标,对需要 x 和 y 坐标的 API 很有用。
设备显示模式 – MDCC 或 WDM。MDCC 将在不同的部分。
快捷方式——这允许用户定义多达 4 个快捷方式,这些快捷方式将显示在设备窗口的顶部,以便于访问。其中大部分是不言自明的,“Sigma Input”将允许用户选择输入法。
通知管理 - 可以定义要存储的通知数量以及收到通知时的操作。
自动启动 - 这是一个小型 PC 软件,允许用户启动/退出/重新启动 Total Control,或者如果具有自动连接的设备插入 USB 端口,它将自动启动。
REST API – 定义 REST API 的用户名和密码,默认情况下,出于安全考虑,密码是 TC ID 的最后 8 个字符。“持续时间设置”是发送另一个“身份验证”所需的时间。如果 PC 上有端口号冲突,可以更改端口号。剩下的就是记帐信息和连接列表。
语音 - 有关详细信息,请参阅语音控制。
动作、点击和滑动
移动可能是您将测试的第一件事,我们通过滑动或滚动来模拟移动,键盘 4 箭头键,PgUp、PgDn、Home、End(菜单)将移动屏幕,带有 4 个箭头键的 Shift 是在屏幕中间,对下一页非常有用,例如在应用程序柜上滑动图片或下一页。Shift-PgUp 和 Shift-PgDn 将移动到文档的前面和底部(尽可能快地滑动)。
三个键很重要:“Esc”、“Tab”和“Enter”。“Esc”键是Android的返回键“<”。某些应用程序提供 Enter 键作为发送,Enter 键将很方便,而不是单击按钮发送。由于没有光标,您可以使用“Tab”和“Enter”来浏览一些选项。通过按额外的 Enter 键可以使用 Enter 键进行搜索。
或者,可以使用鼠标来控制动作,鼠标滚轮充当“向上”和“向下”箭头,鼠标左键用于单击或滑动。鼠标右键有两个特点:
在系统选项“屏幕控制模式”中,您可以选择尽可能使用 Android 滚动功能的“滚动”(除 Shift-up/down/left/right 之外的所有移动键)。
文本输入
Total Control 处理输入的方式是在设备上安装一个名为“Sigma 键盘”的键盘,“Sigma 键盘”是一个在后台与 PC 中的 Total Control 通信的隐形键盘。建议始终使用 Sigma 键盘,因为它允许用户使用 PC 的键盘输入文本。系统设置有一个选项总是使用 Sigma 键盘。当需要输入文本时,设备窗口顶部会出现一个文本框,用户可以通过自己喜欢的语言和 Windows 提供的输入系统在文本框中输入文本。有3个输入选项供用户选择:
还有另一个选项“a”,很少使用,因为一次输入是字母,通常在终端软件中很有用。文本框提供了许多功能:
当文本框出现时,上/下/左/右或PgUp/PgDn等导航键适用于文本框,您需要使用Escape键关闭文本框。
当 USB 断开连接时,设备 TC 会将其键盘恢复为之前的设置。
如果要使用特定键盘,请在设备窗口中选择菜单“更改键盘”选项来更改键盘。
复制粘贴和文件传输
在 Sigma Keyboard 的支持下,您可以在 PC 和设备之间进行剪切粘贴,TC 还支持传输文件:
截图和录像
有关更多选项,请参阅系统设置屏幕截图和视频录制。
有几种方法可以做截图:
提供三种格式:BMP、PNG 和 JPG。截图是在设备(不是现有设备屏幕)上进行的,它将以原始分辨率进行,如果您有高分辨率(例如4K)设备屏幕,请不要使用BMP,传输大的BMP数据需要很长时间到PC(或需要很长时间才能存储)。使用无损 PNG 或 JPG(使用滑块设置质量)以节省空间。
截图可以存储在文件或剪贴板中,文件存储在文件路径中,对于剪贴板,您可以粘贴到“Paint”等图形程序上。
对于具有高分辨率屏幕(2K 或以上)的 PC,捕获原始分辨率会导致将大文件传输到设备。“调整为 1080p”默认选项会将屏幕视为 1080p 并相应地调整大小。
对于视频录制,当打开视频录制时,会出现一个计时器,点击红色矩形停止录制。几点注意事项:
TC 利用 Windows 7 和 10 语音功能,允许用户使用语音打开应用程序或运行功能(请参阅Userlib.js)。默认情况下,设备中的所有应用程序都将被注册,因此您可以使用“打开
您还可以将短语与 Userlib.js 中的函数名称相关联。当听到一个单词时,它会执行一个以设备 ID 作为唯一参数的函数。例如,配置“立即离开”以运行 leaveNow。您可以在 Userlib.js 中创建一个函数。函数 leaveNow(device) {…}
触发短语是“OK TC”,弹出窗口会打开并准备好命令,如果第一个单词是“多个”,用户可以提供命令列表,直到听到“停止”或 60 秒没有可用命令。这些动作将在主设备中执行。
出于安全考虑,需要“开启”语音控制功能才能监听触发短语,开启一台设备将开启所有设备。如果您在系统设置中,您可以选中“始终启用”以自动打开。
特征 | 嗓音 |
---|---|
触发短语 | 好的 TC |
多语音cmd | 多 |
停止多个 | 停止 |
应用 | 打开“应用程序名称” |
打开<短语>;短语=“应用程序名称” | |
功能 | 运行<短语>; 短语=“函数名称” |
特征 | 钥匙 | 嗓音 | 钥匙 | 嗓音 |
---|---|---|---|---|
移动 | 向上箭头 | 向上 | 向上翻页 | 向上翻页 |
向下箭头 | 向下 | 向下翻页 | 向下翻页 | |
左箭头 | 剩下 | shift-PgUp | 去顶部 | |
右箭头 | 对 | 移位-PgDn | 走下坡路 | |
滑动 | 左移 | 向左滑动 | 上移 | 向上滑动 |
右移 | 向右滑动 | 降档 | 刷下 | |
特殊功能 | 家 | 家 | 逃脱 | 背部 |
结尾 | 菜单 |
付费功能
Total Control 提供精简版,可免费用于非商业用途。所有 Total Control 付费功能都是基于 PC 的年度订阅计划。要购买,点击购物车图标,选择您要购买的功能,选择结帐,支付方式,支付完成后,在PC上重启Total Control,授权将升级为新购买的功能。
Total Control 提供 2 种付款方式:
MDC-x
由于 Professional 包含其他付费功能的基本功能,因此用户必须在购买其他功能之前购买 Professional 订阅。如果您计划在以后购买额外的付费功能,则 Professional 1 年订阅到期日期很重要。例如,您在 6 个月前购买了专业订阅并决定购买 MDC-20,您只需支付 MDC-20 价格的一半,MDC-20 的到期日期与专业相同。此外,如果您计划在 3 个月后(专业 9 个月后)购买 MDC-30,您只需支付差价(TC 扣除未使用时间):
(价格(新)- 价格(旧))/365 * 距离专业版到期的剩余天数
在这种情况下:
(价格(MDC-30) – 价格(MDC-20))/365 * 90 天 (3 个月)
所有 MDC-x 都可以通过 Stripe 支付方式升级到更多数量的设备。
TC-DC
TC-DC(设备控制)是一个独立的安卓应用程序(称为查看器),允许 MDCC 用户选择一个设备来控制主设备,一些应用程序更容易通过设备导航而不是使用鼠标和键盘来控制它们。查看器应用程序可以是连接到 MDCC 的设备之一,也可以在运行 TC 的 PC 可访问的任何设备上运行(甚至在数千英里外的 VPN 上)。如果您正在运行 MDCC,如果您在 MDCC,您可以选择任何设备单击 DC 图标,如果您使用 TCP 连接到 MDCC,请在此处下载应用程序。
购买完成后会发送订阅确认邮件并附上“激活码”,如果您打算将Total Control移至新PC或需要重新安装操作系统,请先在新PC中安装精简版PC/OS,使用激活码激活付费功能,输入有效激活码后会生成新的激活码,请妥善保管。您每年只能进行 10 次转账。
我们提供2种付款方式:
项目代码 | 描述 | # 设备 |
---|---|---|
TC-精简版 | 免费版,提供许多基本功能 | 2 |
TC-Pro | 专业,提供许多附加功能 | 4 |
TC-MDC-10 | Total Control 支持 10 台设备 | 10 |
TC-MDC-20 | Total Control 支持 20 台设备 | 20 |
TC-MDC-30 | Total Control 支持 30 台设备 | 30 |
TC-MDC-50 | Total Control 支持 50 台设备 | 50 |
TC-MDC-70 | Total Control 支持 70 台设备 | 70 |
TC-MDC-100 | Total Control 支持 100 台设备 | 100 |
TC-DC | 设备控制 PC-TC 控制其他设备 | 不适用 |
捷径
Total control实现了多种快捷方式来提升用户体验,有2种快捷方式,一种适用于设备(​​在设备设置中),另一种适用于整个系统(在系统设置中):
脚本
Total Control 的最大优势之一是脚本功能。Total Control 提供丰富的 API 来控制一个或多个 Android 设备。它提供了 2 套 API:JavaScript 和 REST API。JavaScript 将在本地运行脚本,REST API 提供语言和主机的灵活性。您还可以使用 REST API 来控制多台运行“Total Control”应用程序的 PC。
JavaScript API
语言
Total Control 为 JavaScript 提供以下框架(ECMAScript 5 与选定的 ES6 功能)
如果 Rhino + RingoJS 没有提供足够的功能,Rhino 的好处是能够直接调用 Java API(Total Control 8 使用 OpenJDK 15)。
Total Control 提供了许多类,几个例子:
Device 和 DeviceArray 类
当设备连接时(自动连接或按下“连接”按钮),从“设备”类创建一个设备对象,使用静态方法“searchObject”定位设备对象。对于多个设备对象,它提供“DeviceArray”类(Array 的子类)。DeviceArray 对象中的设备将同时执行相同的任务。
设备类提供了近 100 种方法和属性来操作设备。DeviceArray 类提供了大约 20 多种常用方法。有关所有方法,请参阅 {{JavaScript API 文档}}。您可以轻松扩展 Device 和 DeviceArray (请参阅扩展 Device 和 DeviceArray)。
使用“Device.searchObject()”定位创建的设备对象,设备对象格式为“device@<10 digits>”。
//Returnonedeviceobject
varmySamsung=Device.searchObject('Samsung-S9');
//Returnalldeviceobjects, DeviceArray
varallDevices=Device.searchObject(tcConst.DevAll);
//Returndeviceobjectsbelongtosamegroup, DeviceArray
varallGroupX=Device.searchObject(tcConst.DevGroup,'firstrow');
varallGroupY=Device.searchObject(tcConst.DevGroup,'secondrow');
//Combine2groupstoformalargergroup, DeviceArray
vargroupXY=allGroupX.concat(allGroupY);
由于 DeviceArray() 是 Array() 的子类,它继承了 Array 类的大部分方法,因为所有 TC 特定的方法都绑定到 DeviceArray,如果你有一个数组,请使用 "var ary = new DeviceArray().concat (ary)" 转换为 DeviceArray。
//Thiswillfailsincethereisno"click"methodinArray
vardevice=Device.getMain();
varary=[device];
ary.click(100,100);
//Thiswillwork
vardevice=Device.getMain();
varary=newDeviceArray(device);
ary.click(100,100); // or ary.clickSync("OK");
几个例子:
//clicklocation100,200ondevice name "Samsung-S10".
vardevice=Device.searchObject('Samsung-S10');
if(device){
device.click(100,200); // or device.clickSync("Start");
}
//clickinthemiddleofthescreenonallconnecteddevices.
vardevices=Device.searchObject(tcConst.DevAll);
if(devices){
devices.click(0.5,0.5); // or device.clickSync("John");
}
目录和 Userlib.js
默认情况下,脚本目录位于\Users\<用户名>\Documents\Scripts 目录,您可以通过单击“脚本”来更改它,在“脚本列表”最上面一行更改目录。
在其中,您可以创建一个名为“Userlib.js”的文件,该文件将始终在脚本执行之前加载,您可以包含常用功能,将原型添加到现有类或引入 3rd 方软件。
要调试“Userlib.js”,请使用“终端”,要重新加载“Userlib.js”,请单击终端窗口右下方的重新加载图标。
绝对与相对坐标
对于x、y坐标,TC提供“绝对”和“相对”坐标(系统设置显示坐标会同时显示两个坐标),绝对坐标从(0, 0)到(width – 1, height – 1),相对坐标为通常是从 (0, 0) 到 (0.9999, 0.9999) 的 4 个小数点。相对坐标乘以设备宽度和高度将得到绝对坐标。坐标并不理想,Professional 支持使用 UI 元素中的文本在运行时检索坐标的AAI 。
扩展设备和设备阵列
JavaScript 的额外好处是可扩展性,您可以通过向类添加原型来扩展方法。假设您要为单个和多个设备创建一个方法“longPress”,一种编写方法是:
Device.prototype.longPress=function(x,y){
varretval=this.click(x,y,tcConst.STATE_DOWN);
if(retval!=0){
returnretval;
}
delay(500);
returnthis.click(x,y,tcConst.STATE_UP);
}
DeviceArray.prototype.longPress=function(x,y){
for(leti=0;i<this.length;++i){
retval=this[i].longPress(x,y);
if(retval!=0){
returnretval;
}
}
return 0;
}
此实现对于 DeviceArray 中的大量设备效率不高,如果阵列中有 100 个设备,该方法可能需要长达 50 秒。
最好的方法是先向所有设备发送 STATE_DOWN,然后等到剩余的 500 毫秒用完。幸运的是,Device 和 DeviceArray(多个设备)引入了“sendAll”,它会执行指定的方法并等到指定的时间到期。这样,执行时间几乎是 500 毫秒。由于“sendAll”在 Device 和 DeviceArray 中可用,实现 Device 和 DeviceArray 的代码完全相同。
Device.prototype.longPress=function(x,y){
varretval=this.sendAll(Device.prototype.click,
[x,y,tcConst.STATE_DOWN],500);
if(retval!=0){
returnretval;
}
returnthis.sendAll(Device.prototype.click,[x,y,tcConst.STATE_UP]);
}
DeviceArray.prototype.longPress=Device.prototype.longPress;
sendAll 仅适用于成功返回 0 的方法。
脚本工具
Total Control 中有很多工具可用,点击“脚本”会打开一个新窗口:
终端:打开 Rhino + RingoJS 命令提示符,您可以将其用于测试或开发目的。单击右下角的按钮以重新加载解释器和 Userlib.js。可以使用 load("filename.js") 来运行脚本。
脚本列表⇒路径:脚本默认路径,点击图标可更改路径到其他目录。
脚本列表⇒ JS 源文件:用于快速执行一个JavaScript 文件,它提供了一个简单的编辑器来快速更改或单击箭头键来执行脚本。
脚本列表⇒记录脚本:将设备上的动作记录到Excel文件中,Excel文件也可用于生成JS脚本或JSON文件(可能对REST API有用)。没有 JavaScript 经验的用户可以使用此工具生成简单的脚本。
脚本列表⇒图像助手。从主设备屏幕内容生成 BMP 文件,seekImage() 需要图像,它扩展 BMP 文件以提供附加信息,例如应用程序名称、活动、宽度和高度信息。seekImage() 将利用这些信息而不提供大量参数。
脚本列表⇒颜色助手。从主设备(如图像助手)加载屏幕内容,这是一个放大的颜色选择器,用于选择颜色的 RGB 值并生成具有复杂参数的 seekColor()。可以支持单色和多色。
执行(将重命名为任务)。创建一个任务以在各种条件下运行脚本,例如日期和时间、迭代次数、定期间隔或设备。任务执行的输出和结果将被保存以供查看。也可以通过 JS API 创建或更改任务。
检查:检查与脚本和引擎相关的各种内部变量。
可访问性是 Android 中将屏幕上的 UI 元素映射到底层节点的功能,该节点可以表示一个 UI 元素(例如按钮)或一组 UI 元素或某些元素的布局。节点(元素、组或布局)可以通过节点 ID(以十六进制字符串表示)来标识。我们集成了 Accessibility、TC 脚本框架和 UI Automator 库来实现以下目标:
AAI最简单的情况:
devices.inputTextSync([position], "text") // Enter text, the position is used for multiple inputs
devices.runAppSync(<package name>, [query])
devices.restartAppSync(<package name>, [query])
8.0(更新 20)在 REST API 上具有上述功能。
对于更复杂的脚本,您需要通过查询可访问性节点来定位节点 ID 或节点 ID 列表。Java 中的 UI Automator 在 UiDevice.findObject() 或 findObjects() 中提供了“UiSelector”和“BySelector”来定位节点,对于多个条件,需要多个查询语句,对于 JavaScript 来说,它可能过于复杂且不利于用户移植.
new UiSelector().className("android.widget.TextView").text("OK")
"C: android.widget.TextView||T:OK"
查询语法可以包含“!” 表示不,“>”,“<”表示大于或小于,“*”表示通配符匹配,“/<regexp>/”表示正则表达式。它可以匹配包名、类名、资源ID、文本、描述、子计数和输入类型。
如果找到,则使用 UiElement.findObject() 返回节点的对象,因为该对象已存储设备对象,因此执行您不需要像其他动作/移动命令那样指定设备。
var obj = UiElement.findObject(device, "T:OK");
if (obj) {
obj.clickSync();
}
如果您有多个设备,它将返回类 UiElementArray 中的对象数组,一个动作将导致所有设备做出反应,下面的代码将单击所有带有“OK”文本的设备:
var objs = UiElement.findObject(devices, "T:OK");
if (objs) {
objs.clickSync();
}
您还可以从应用程序中检索信息,例如带有小时、分钟和秒的时钟:
var hour = UiElement.findObject(devices, "R:" + app + ":id/timeHour").getText();
var min = UiElement.findObject(devices, "R:" + app + ":id/timeMinute").getText();
var sec = UiElement.findObject(devices, "R:" + app + ":id/timeSecond").getText();
print("The current time is " + hour + ":" + min + ":" + sec);
或者,您可以从“UI Explorer”中检索信息以查找节点的查询语法(不是最优化的查询)。例如
为了减轻 JavaScript 的复杂性和 Total Control 的 CPU 利用率,所有搜索都在设备上进行。
设备.sendAAi(
该命令分为“preAction”和“postAction”,“preAction”是在进行搜索/计数之前,“postAction”是对搜索输出的操作。
“elements”包含一个或多个节点ID,如果指定了elements,则不进行搜索,将传递给preAction/postAction执行。
“query”包含搜索的查询语法。
“模板”包含 4 个预定义的搜索模板之一来替换复杂的查询。
例子:
var retval = device.sendAai({query:"T:/[0-9]/", text:"OK"})
它将返回结果或 null。上面计算器的输出将返回
{count: 10, ids: ['97a3','9b64','9f25','a6a7','aa68','ae29','b5ab','b96c','bd2d','c4af']}
“count”包含匹配数(count == retval.ids.length),返回的节点基于节点的位置,从上到下,从左到右。第一个节点是按钮“7”。点击“7”:
var clickRet = device.sendAai({elements:[retval.ids[0]], postAction:"click"})
或者,下面将做同样的事情:
var clickRet = device.sendAai({query:"T:7", postAction:"click"})
(“T:7”表示文本为“7”,在这种情况下,它可能会匹配“7”作为第一个节点的结果,点击结果元素什么也不做),或者,你可以给它添加按钮(来自 UI 资源管理器):
var clickRet = device.sendAai({query:"T:7||C:android.widget.Button", postAction:"click"})
这将打印 NOT 0-9(所有特殊键):
>> var retval = device.sendAai({query:"T:!/[0-9]/|| C:android.widget.Button", fields:"T", postAction:"getNodes"})
{count: 10, list: [{id: '889f', text: 'AC'},{id: '8c60', text: '÷'},{id: '9021', text: '×'},{id: '93e2', text: 'DEL'},{id: 'a2e6', text: '-'},{id: 'b1ea', text: '+'},{id: 'c0ee', text: '%'},{id: 'c870', text: '.'},{id: 'cc31', text: '±'},{id: 'cff2', text: '='}]}
下面将找到一个带有“确定”的文本或描述的节点,然后单击它:
var retval = device.sendAai({template:"findText", text:"OK", postAction:"click"})
请阅读FindNode 用户指南了解更多信息。
后台查询(在 8.0 更新 20 中提供)
后台查询允许用户将设备中的查询映射到 JavaScript 回调函数,当查询条件满足时,会触发带有节点 ID 的回调函数。
例如,如果您想在计算器显示 999 时关闭计算器应用程序。
函数closeMe(名称,设备,包名,节点ID){ device.closeApp(packageName); 返回真; } addQueryListener("closeCalculator", device, "T:/^999$/", closeMe);
如果设备没有运行计算器应用程序,需要包含计算器包名:例如“P:com.sigma_rt.calc||T:/^999$/”。
“return true”允许Total Control重新激活后台查询,没有“return true”,回调只运行一次。
在计算器应用程序中输入“999”以终止计算器。
同步 API
在版本 8 之前,所有的动作或移动命令都是异步的,当一个命令(例如 device.click())返回时,表示该命令已经传递给我们的移动代理执行,当命令返回时,很可能是该命令未执行,因此需要睡眠以给时间完成操作并刷新屏幕:
device.click(100, 100); 睡眠(300);
这可能发生在所有使编码繁琐的动作和移动命令上。UI Automator 包括同步命令和等待窗口更新,当点击时,一个窗口已经更新,很可能命令完成。所有同步命令都以“Sync”为后缀。所有“同步”命令都使用 AAI 标签而不是坐标:
运行AppSync()
重启AppSync()
点击同步()
inputTextSync()
UiElement 和 UiElementArray 对象方法
同步功能的一个缺点是命令完成所需的时间比异步命令长得多,这可能会减慢大量设备的脚本执行速度,我们已经解决了这个问题。
后续版本将为所有动作和运动功能提供同步功能。
多设备控制中心(MDCC)
在 Total Control 的主窗口点击“多控中心”图标,进入多控中心.
多控中心用户界面
更多内容将很快提供
设备控制设备组(DC)
该文章将很快提供。