使用AirtestIDE连接安卓设备之前,需要确保ADB已经连接上了设备。
① 我们可以使用 adb devices
来查看设备情况,如果仅仅提示 List of devices
attached
,则表明ADB未连接上任何设备;此时需要检查手机上的 USB调试
功能是否已开启,或者换一根USB数据线;
② 如果ADB已连接上设备,那么执行 adb devices
后,会显示已连接设备的列表:SJE5T17B17001648是设备号
List of devices attached
SJE5T17B17001648 device
SJE5T17B17001650 device
备用的设备连接参数怎么理解
IDE提供了3个备用的连接参数: Use javacap
、Use ADB orientation
和 Use ADB touch
;
① 第一个 Use javacap ,是给部分无法正常看到手机画面、 minicap初始化失败 的手机或设备用的,所以模拟器看到黑屏、部分特殊的平板等设备可以考虑勾选这个选项
② 第二个 Use ADB orientation
是 屏幕旋转 的,如果在安卓手机屏幕旋转方向检测有问题、或者是部分特殊的平板无法显示正确的屏幕方向时可以勾选
③ 第三个 Use ADB touch
是 发送adb指令来点击屏幕 ,效果很差,速度也很慢, 不建议勾选 ,只有在部分无法点击屏幕的特殊安卓设备上才需要使用(例如智能后视镜、特殊型号的平板等设备上)
正常情况下,手机都可以点击,如果无法被点击(比如小米设备),一般都是因为手机设置有选项漏了打开,特别是小米设备要注意 开启允许模拟点击 的设置。
①手机系统是MIUI11,此时我们需要在点击“connect”按钮之前,把 “use Javacap + use orientation” 这两个选项勾选上,再点击“connect”按钮即可正常使用
② 手机的安卓版本是Android10,此时仅需要把IDE更新到最新版本(1.2.3)即可;如果IDE使用的是本地的python环境,那还需要把本地python环境的Airtest更新到最新版本。
1.连接Android手机
# 什么都不填写,默认取当前连接中的第一台手机
Android:///
# 连接本机默认端口连的一台设备号为79d03fa的手机
Android://127.0.0.1:5037/79d03fa
# 用本机的adb连接一台adb connect过的远程设备,注意10.254.60.1:5555其实是serialno
Android://127.0.0.1:5037/10.254.60.1:5555
模拟器或者MIUI11等设备需要添加备选的连接参数才可以正常连接,而且在命令行连接设备时也需要把这些参数加上:
使用了备选连接参数的设备
# 夜神模拟器(127.0.0.1:62001为夜神模拟器的端口号)
Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP&&ori_method=ADBORI
# 设备号为79d03fa的 小米MIUI11 设备
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI
注意: &&
在Windows平台下需要转义成 ^&^&
;在MAC平台下需要转义成 /&/&
。否则有可能出现因运行命令被截断而产生的各种报错。
如何在Python脚本中使用Airtest
连接手机,在我们了解过auto_setup接口后就会知道,需要把一些参数传给它,然后初始化Airtest运行环境用的。因此,一个纯.py脚本的初始化代码可以是这样的:
from airtest.core.api import *
from airtest.cli.parser import cli_setup
if not cli_setup():
auto_setup(__file__, logdir=True, devices=[
"Android:///?cap_method=javacap&ori_method=adbori",
])
# do something
# touch((x, y)
上面这段代码的意思是说,当使用 python xxx.py来运行本文件,且不带任何命令行参数时,则自动使用auto_setup这个接口来对airtest相关的参数进行初始化。这样只需要在写py脚本时,填写好指定的参数就能直接用 python xx.py 指令来运行脚本。
同时,原先传统的airtest run xx.air –-devices Android:///命令行运行方式也不受影响,只要脚本检测到传入了命令行参数(即代码中的if not cli_setup()判断),就依然优先使用命令行参数来初始化Airtest环境。