前言

Sonic v1.3.0-beta 已经发布啦!恭喜 Sonic 获得霍格沃兹的赞助~
官网:https://sonic-cloud.gitee.io
恭喜 Sonic 喜提三个用户案例。自动化实践方案

iOS 支持

上回说到,如何用 Sonic 云真机打王者。
随着 iOS 远控的面世,我本着测试用户反馈的效果。获得的反馈基本是 iOS 的投屏清晰度高,FPS 能达到 30,但是触控延迟也比较高


这是因为跟安卓触控原理不一致。
iOS 的触控体验我是监听鼠标点击与松开完成一次滑动事件,才发送一个滑动指令给 Agent 执行,里面包含两次移动的坐标信息。
但是安卓的触控经过我调用 API 的方式,实时监听鼠标移动轨迹来发送指令给手机,所以触控体验会更佳、更流畅。
但是 iOS 的话,这种方式在 webdriveragent 里面很不好实现,目前也在探索之中

TouchAction ta = new TouchAction(iosStepHandler.getDriver());
String xy1 = msg.getString("pointA");
String xy2 = msg.getString("pointB");
int x1 = Integer.parseInt(xy1.substring(0, xy1.indexOf(",")));
int y1 = Integer.parseInt(xy1.substring(xy1.indexOf(",") + 1));
int x2 = Integer.parseInt(xy2.substring(0, xy2.indexOf(",")));
int y2 = Integer.parseInt(xy2.substring(xy2.indexOf(",") + 1));
ta.press(PointOption.point(x1, y1)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(300))).moveTo(PointOption.point(x2, y2)).release().perform();

滑动触控有个坑,两个坐标滑动动作之间,要预留大约 300 毫秒的停顿,不然很容易造成滑动失效或者设备不动的情况。

控件获取

获取控件的话,原理便跟安卓的一致,将控件信息 dump 之后,获得的是 xml 格式,这时候使用 jsoup 一类的框架进行解析,然后自行转换成 json 渲染给前端。

调整 FPS 与清晰度

至于调整 FPS 和清晰度,后面也会开放给用户自定义,目前是通过 Appium Setting 对 wda 内置的 mjpegserver 做调整。

iosDriver.setSetting(Setting.MJPEG_SERVER_FRAMERATE, 30);

所以说,用 iOS 打王者,体验就没安卓那么好咯~

物理管控

在某些用户反馈,机器长时间插着 usb 充电容易造成鼓包等等安全问题,经过我一番研究后发现,改善这类问题只能从硬件级别入手,或搭配专门定制的 usbhub 来控制,但是这成本对于中小企业无疑是巨大的,因此在 v1.3.0 中,已加入电池温度监控,当温度过高时,我们的维护人员就要进行物理干涉啦!

电池温度的监控,主要使用 adb 的方式去获取
输入 adb shell dumpsys battery
我们获取的信息应该有以下几项

Current Battery Service state: 
AC powered: false 
USB powered: true 
Wireless powered: false
 Max charging current: 500000 
Max charging voltage: 5000000 
Charge counter: 4230000
status: 5 
health: 2
present: true 
level: 100 
scale: 100 
voltage: 4303 
temperature: 270 
technology: Li-ion 
mUsbStatus: 0 
PhoneTemp: 300

其中 temperature 字段就是我们需要的,单位是 0.1 摄氏度。

最后

Sonic 仍在继续努力~大家可以进群一起讨论,让 sonic 更好~


↙↙↙阅读原文可查看相关链接,并与作者交流