三、Airtest连接设备的脚本介绍

1. 前言

Airtest介绍小结里面,我们有说过Airtest支持连接Android、iOS和Windows这几类“设备”。今天这一小节,我们将详细了解如何使用Airtest脚本来连接我们的待测设备。

2. 连接设备的接口介绍

Airtest提供了多种连接设备的接口:

1)auto_setup

首先是这个我们非常熟悉的初始化接口auto_setup,使用它可以帮助我们自动配置运行环境,如果当前没有连接设备的话,就默认尝试连接Android设备。

当然,它也支持我们传入设备连接字符串“列表”,来帮我们 连接单台或者多台设备

  1. auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17","Android://127.0.0.1:5037/SJE5T17B18"])

image-20211029120219346

2)connect_device

connect_device 接口中传入设备的URI字符串即可连接1台设备:

  1. dev = connect_device("Android://127.0.0.1:5037/SJE5T17B17")

如果需要连接多台设备,可以编写多条的 connect_device 脚本,并且用 set_current 来切换到当前使用设备:

  1. # 连上第一台手机
  2. dev1 = connect_device("Android://127.0.0.1:5037/serialno1")
  3. # 连上第二台手机
  4. dev2 = connect_device("Android://127.0.0.1:5037/serialno2")
  5. # 切换当前操作的手机到序列号为serialno1的手机
  6. set_current("serialno1")

image-20211029120149914

3)init_device

init_device 接口只需要传入 设备平台和设备的uuid 即可,参数详情可以查看下图:

  1. init_device(platform="Android",uuid="SJE5T17B17")

image-20211029120055213

3. 连接Android设备

介绍了Airtest给我们提供的连接设备的各种API之后,我们再来了解下,我们是如何编写各种设备的URI字符串的。(上文类似Android:///127.0.0.1:5037/79d03fa 这样的就是1条URI字符串)

1)Android设备的URI字符串

  1. # 什么都不填写,默认取当前连接中的第一台手机
  2. Android:///
  3. # 连接本机默认端口连的一台设备号为79d03fa的手机
  4. Android://127.0.0.1:5037/79d03fa
  5. # 用本机的adb连接一台adb connect过的远程设备,注意10.254.60.1:5555其实是serialno
  6. Android://127.0.0.1:5037/10.254.60.1:5555
  7. # 连接夜神模拟器(127.0.0.1:62001为夜神模拟器的端口号)
  8. Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP

2)连接Android设备的示例

  1. # 使用auto_serup
  2. auto_setup(__file__, devices=["Android://127.0.0.1:5037/SJE5T17B17"])
  3. # 使用connect_device
  4. connect_device("Android:///SJE5T17B17?cap_method=javacap&touch_method=adb")
  5. # 使用init_device
  6. init_device(platform="Android",uuid="SJE5T17B17", cap_method="JAVACAP")

4. 连接iOS设备

1)iOS设备的URI字符串

  1. # 连接本机部署的iOS真机
  2. iOS:///http://127.0.0.1:8100
  3. # 使用tidevice连接的iOS设备,DeviceIdentifier可以在启动的信息中查看
  4. http+usbmux://DeviceIdentifier

2)连接iOS设备的示例

  1. # 使用auto_serup
  2. auto_setup(__file__,devices=["iOS:///http://127.0.0.1:8100"])
  3. # 使用connect_device
  4. connect_device("iOS:///http://127.0.0.1:8100")
  5. # 使用init_device
  6. init_device(platform="IOS",uuid="http://127.0.0.1:8100")

5. 连接Windows窗口/桌面

1)Windows窗口/桌面的URI字符串

  1. # 连接一个窗口句柄为123456的Windows窗口
  2. Windows:///123456
  3. # 连接一个Windows窗口,窗口名称匹配某个正则表达式
  4. Windows:///?title_re=Unity.*
  5. # 连接windows桌面,不指定任何窗口
  6. Windows:///

2)连接Windows窗口/桌面的示例

  1. # 使用auto_serup
  2. auto_setup(__file__,devices=["Windows:///"])
  3. # 使用connect_device
  4. connect_device("Windows:///?title_re=Unity.*")
  5. # 使用init_device
  6. init_device(platform="Windows",uuid="123456")

6. 编写连接设备的脚本的注意事项

1)什么情况需要用脚本连接设备

在AirtestIDE中运行.air脚本,IDE会自动帮我们获取设备窗当前连接的设备来运行脚本;除此之外,其余情况均需要我们用脚本处理设备连接这个事情:

  • 在AirtestIDE运行.py脚本(可使用初始化接口 auto_setup 连接设备)
  • 使用AirtestIDE之外的编辑器运行.air.py脚本,均需要我们在脚本里面连接待测设备
  • 在命令行使用 airtest run 命令运行脚本,且没有传入 --device 参数

2)连接设备的脚本应放在整个脚本的那个位置

连接设备的脚本最好放在脚本初始化接口 auto_setup 里面,如果同学们想使用其他语句来连接脚本,也尽量跟在脚本初始化接口之后就好了,如果设备连接语句放在了操作的脚本之后,可能导致出现'NoneType' object has no attribute 'snapshot' (操作之前未连接上设备)这样的报错:

image-20211029143737567