2.3 Android模拟器连接¶
如果我们手边没有可用的Android真机,又想进行Android应用自动化测试,这时候就要使用AirtestIDE的Android模拟器自动化测试功能了。
AirtestIDE所支持的模拟器包括 Android Virtual Device(AVD) 和市面上常见模拟器(如 Mumu模拟器 )。
模拟器可以像真机一样连接到AirtestIDE中,如果画面显示为黑屏,请在连接模拟器之前,勾选connect按钮下拉菜单里的 Use javacap
选项,然后再点击connect按钮进行连接。如果依然连接失败,可以尝试再勾选 use adb orientation
后连接。
1. 模拟器连接¶
这里以某个模拟器为例, 展示一下模拟器的连接流程:
- 首先,与手机类似,需要打开模拟器的
开发者选项-允许USB调试
。部分模拟器可能需要找到设置-关于手机
点击多次后才能打开开发者选项:
- 打开AirtestIDE设备窗内的
远程设备连接
,输入adb connect 127.0.0.1:7555
后(该端口号与模拟器品牌相关,见 2. 模拟器连接端口汇总 ),点击连接
按钮
- 设备列表中可见
127.0.0.1:7555
设备,先点击Connect按钮旁的下拉菜单,勾选Javacap模式后,再点击Conenct
按钮(如果没有勾选Javacap模式,会导致看到的手机画面是黑屏)。如果还是未能连接成功,可以补充勾选use adb orientation
再连。
- 完成连接:
2. 模拟器连接端口汇总¶
主流模拟器的设备连接代码如下:
模拟器 | adb连接代码 |
---|---|
网易Mumu | adb connect 127.0.0.1:7555 |
夜神 | adb connect 127.0.0.1:62001 |
逍遥 | adb connect 127.0.0.1:21503 |
iTools | adb connect 127.0.0.1:54001 |
天天 | adb connect 127.0.0.1:6555 |
海马玩 | adb connect 127.0.0.1:26744 |
BlueStacks | adb connect 127.0.0.1:5555 |
这些模拟器的连接过程均可参考上文中 1. 模拟器连接 的描述进行连接。
3. Android原生模拟器(AVD)¶
-
安装Android环境:
搭建 Android Studio ,完成后在 Android Studio 中,选择
Tools > Android > AVD Manager
-
创建模拟器:
- 创建设备界面:
- 选择设备:
- 选择系统:
- 配置页面填写如下:
- 设备创建完成,启动虚拟设备:
- 创建设备界面:
-
连接模拟器:
- AirtestIDE设备窗内将出现
emulator-555x
设备,点击Conenct
按钮:
- 完成连接:
- AirtestIDE设备窗内将出现
4. 部分模拟器相关问题¶
-
连接模拟器时,需要先勾选
use javacap
选项后再点击connect
按钮连接,才能避免看到的屏幕是黑屏。 -
在部分版本的模拟器上,可能勾选了
use javacap
后依然连接失败,此时可以尝试再勾选use adb orientation
选项后再重新连接即可。 -
由于连接模拟器时需要勾选上述选项,因此在运行脚本时如果连接的是模拟器,同样需要把这些参数传入运行脚本中,具体可以查阅下文内容
-
部分品牌模拟器,可能出现无法正常点击的现象,可以尝试勾选
use ADBtouch
后再连接。 -
部分品牌模拟器(例如夜神),可能因为默认使用键盘输入,因此无法调用yosemite输入法,导致
text()
接口无法输入文字。可以先确认模拟器设置中,硬件-物理键盘
是否被勾选了, 取消勾选后再重新尝试即可。
如果依然失败(物理键盘选项被不断自动重置),可以打开右上角的模拟器设置,勾选软键盘选项后重试:
如果依然无法输入,可以考虑换用poco来输入,或是直接使用adb指令输入英文内容,详见 文档 。
yosemite.apk
未安装也容易导致模拟器连接失败,一般会出现如下的报错;请检查模拟器上是否成功自动安装了yosemite.apk
,如果没有安装的话,检查开发者选项中是否默认阻止了通过USB安装应用,应该选择允许,然后在连接时IDE会自动向模拟器中安装该apk 如果还是装不上,可以在IDE目录下搜索一下这个apk文件,手工安装到模拟器中:
5. 传入模拟器设备参数¶
在命令行传入模拟器设备参数¶
如果在命令行运行脚本时,连接的是模拟器设备,有一点需要注意,因为我们在连接时勾选了Use javacap
和Use ADB orientation
这俩个选项,所以在命令行连接设备的时候,也需要把这俩个参数附加在设备字符串后面:
airtest run D:/test/moniqi_test.air --device Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP^&^&ori_method=ADBORI --log E:/log_test
- 模拟器设备字符串的定义为:
Android://<adbhost[localhost]>:<adbport[5037]>/模拟器端口号
其中,adbhost
是adb server
所在主机的ip,默认是本机127.0.0.1
,adb port
默认是5037
。
2. 设备字符串后面跟了多个参数,需要用&&
来连接,但是&
这个字符需要转义才能够生效: Windows下改写成^&^&
,MAC下改写成/&/&
在脚本编写模拟器的connect_device语句¶
如果不想在命令行中传入设备参数,我们也可以在脚本内编写connect_device语句来连接模拟器设备:
# -*- encoding=utf8 -*-
__author__ = "xiaoming"
from airtest.core.api import *
dev = connect_device("Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP^&^&ori_method=ADBORI")
auto_setup(__file__)
这样在命令行运行脚本时,就不用添加连接模拟器设备的参数了。
在纯.py脚本传入模拟器设备参数¶
如果我们使用纯.py脚本,在设备初始化时,也需要传入相应的模拟器设备参数:
# -*- encoding=utf8 -*-
__author__ = "xiaoming"
from airtest.core.api import *
from airtest.cli.parser import cli_setup
if not cli_setup():
auto_setup(__file__, logdir=True, devices=[
"Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP^&^&ori_method=ADBORI",
])