三、常见问题汇总

1. AirtestIDE常见问题

1)IDE提供的备用连接参数如何理解

IDE提供了3个备用的连接参数: Use javacapUse ADB orientationUse ADB touch

image

① 第一个 Use javacap ,是给部分无法正常看到手机画面、minicap初始化失败 的手机或设备用的,所以模拟器看到黑屏、部分特殊的平板等设备可以考虑勾选这个选项

② 第二个 Use ADB orientation屏幕旋转 的,如果在安卓手机屏幕旋转方向检测有问题、或者是部分特殊的平板无法显示正确的屏幕方向时可以勾选

③ 第三个 Use ADB touch发送adb指令来点击屏幕 ,效果很差,速度也很慢,不建议勾选,只有在部分无法点击屏幕的特殊安卓设备上才需要使用(例如智能后视镜、特殊型号的平板等设备上) 正常情况下,手机都可以点击,如果无法被点击(比如小米设备),一般都是因为手机设置有选项漏了打开,特别是小米设备要注意 开启允许模拟点击 的设置

关于连接参数

通常情况下,我们不建议大家主动去勾选这些备选的连接参数,除非当我们在连接设备时,出现画面黑屏等问题时,才可以考虑勾选备选的连接参数来兼容问题设备。

① 如何在脚本中添加备选参数

如在IDE连接设备时,勾选了一些备选参数,则同学们在脚本中连接该设备,也要添加对应的备选参数。特别是使用此类设备在命令行运行脚本时,千万要记得将参数加在设备连接字符串上:

  1. # 添加了3个备选参数的1个安卓设备
  2. Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_metho

2)如何干净地卸载AirtestIDE

AirtestIDE启动时,黑色终端窗口顶部会有一条 log ,类似于:

  1. loading config from : ['C:\\Users\\xxx\\AppData\\Local\\AirtestIDE\\AirtestIDE\\user.json']

我们可以去到这个目录下删除掉这个 AirtestIDE 的目录,里面包括了配置文件、可能的 log 文件等。

但是如果你在IDE中设置了自定义的 log 路径,就需要再另外删除你自行定义的 log 目录下的文件。

3)在IDE中如何引入第三方库?

AirtestIDE内置了一个精简的python环境,缺少很多第三方库;如果需要在IDE中引入各种第三方库,可以先在本地的python环境中装好,再设置IDE使用本地的python环境,具体步骤如下:

① 请自行在你的电脑上安装属于你自己的Python(3<=python<=3.9,3.10暂不支持),然后再安装对应的依赖库。你可以通过一些环境管理方案来管理你的python环境,例如virtualenv

② 在刚才安装好的本地Python环境中,安装airtest相关的依赖库,详细内容请参考文档:https://airtest.doc.io.netease.com/IDEdocs/3.4run\_script/0\_run\_script/#4

③ 在本地安装完属于你自己的python环境后,再在IDE的设置里面设置好你本地的 python.exe 的路径

image

4)连接模拟器出现黑屏

请务必 将AirtestIDE更新至最新版 之后再来尝试以下操作:

① 先尝试在连接模拟器之前下拉勾选 Use javacap 选项,之后再点击 connect 按钮连接模拟器

② 如果仍然黑屏,断开模拟器,下拉勾选 Use javacapUse ADB orientation 这俩个选项,再次连接即可

③ 如上述方式都不见效,可以上GitHub提一个issue,贴上使用的IDE和模拟器版本详情(GitHub地址:https://github.com/AirtestProject/AirtestIDE/issues)

5)复制IDE中log窗口生成的报告命令在命令行执行报错

常见的情况可能有如下几种:

① 复制的命令路径中含有空格,导致程序报错:找不到文件或者路径;只需要将命令中的路径用英文模式下的双引号括起来即可。

② 命令行中包含了 & 这样的符号,可能会导致命令行被中断,常见于一些勾选了 use javacap这样的选项后连接的设备。但是&这个字符需要转义才能够生效:Windows下改写成^&,MAC下改写成/&

6)IDE自带的查看应用包名的功能

大家经常会使用 start_app("包名") 来启动待测应用,而这个包名需要我们用命令去获取。

实际上,我们还可以通过IDE自带的一个 Android助手 ,帮助我们快速获取已连接设备上的应用包名。

连接上待测的安卓设备以后,点击右上角的手机助手,然后再点击 打开Android助手 选项:

image

image

之后我们就可以在弹出的窗口中查看到设备上的应用包名:

image

另外,我们还可以在设备上打开想要获取包名的应用,之后点击安卓助手右下方的 refresh 按钮,即可看到当前打开应用的 packageactivity

image

7)IDE的脚本编辑和log查看窗口显示空白

有些同学在启动IDE后,发现不能够看到脚本编辑窗口和log查看窗口中的文字,就像下图这样:

image

包含启动后闪退在内,这些问题大概率都是由显卡兼容性问题导致的。我们可以通过双击文件夹中的 兼容性模式启动.bat 脚本就能够正常启动AirtestIDE。

并且,在1.2.3及更高版本的IDE中,我们在设置中新增了一个选项:

image

默认情况下会选择 default 模式。如果启动有问题的用户,可以尝试选中下拉菜单中的另外三个选项,并且重启AirtestIDE,查看接下来是否能正常显示脚本编辑窗口和log查看窗口。

如果能够生效,未来启动AirtestIDE时都将会以这个配置项来启动,无需每次都手工双击 兼容性模式启动.bat 脚本来启动AirtestIDE了。

8)不能输入密码?密码界面黑屏?

应用的登录页面或者密码界面一般都不给截屏录屏的,同学们可以检查看看你的测试设备的设置里面,有没有安全键盘、防止恶意截屏录屏之类的设置,关掉就行。(安卓设备需要安装airtest的专用输入法:Yosemite.apk)

9)设备的3种状态:device、unauthorized、offline

① DEVICE:设备在线可连接

通常情况下,我们使用 adb devices 命令在命令行查看与本机连接的设备详情,或者在Airtest IDE的设备连接窗口查看当前设备列表时,只有设备状态为 device 的设备,才是与本机正常连接且可通讯的设备:

image

② UNAUTHORIZED:未允许USB调试

如果开启了手机的 USB调试 选项并且用USB线连接好了设备和电脑,却发现设备状态为 unauthorized ,则表示未处理 允许USB调试 的弹窗,允许该弹窗即可:

image

③ OFFLINE:设备掉线不可用

常见于2种设备连接情况:

一种是连接模拟器设备,模拟器未启动完全就使用 adb connect 命令连接或者使用过程中模拟器挂了,都会出现模拟器的状态为 offline 的情况。这时候只要重新使用 adb connect 命令再次连接模拟器即可。

另外,也可能是模拟器自带的adb版本与Airtest自带的adb版本不一致,发生了冲突,导致adb连接出现问题,也会造成模拟器的状态为 offline 。这时需要将2个不一样版本的adb统一成一个相同的版本即可。

第二种情况常见于真机的无线连接。WiFi波动导致设备断连,出现 offline 状态,则需要重新执行 adb connect ip:port 。如还不能解决,则需要将无线连接的所有步骤重来一次,真机无线连接的教程可以参考:https://airtest.doc.io.netease.com/IDEdocs/3.2device\_connection/1\_android\_phone\_connection/#4

10)怎么获取Windows窗口的句柄

① 在IDE的LOG窗口查看

在IDE中连接上该Windows窗口,然后随便运行1个自动化脚本,我们可以在log查看窗的最上面,看到运行该脚本的命令,其中包含Windows窗口的句柄:

image

② 使用网上的工具查看

使用VC或者VS里面tool中的SPY++,也可以查看窗口的句柄、名字、类、类型、大小和位置等。还有其它的一些方法和工具可以自行百度。

11)IDE连接iOS没有反应

很多同学在部署好iOS真机之后,在IDE的设备连接窗口点击connect按钮连接iOS设备没有反应,或者出现报错无法正常连接,通常情况下我们可以检查下述情况:

  • AirtestIDE是否为最新版本,不是请先更新至最新版本
  • 检查所使用的xcode版本和iOS系统版本,xcode12.1、iOS13.5以下的版本,可以优先选择使用网易的iOS-tagent
  • xcode12.1、iOS13.5以上版本,需要使用appium最新的wda,iOS-tagent暂不支持
  • 检查 http://127.0.0.1:8100/status 的状态是否为success,不是请重新部署
  • 检查填入的iOS字符串是否正确

12)使用IDE截图特别模糊如何处理

如果同学们发现使用IDE截出来的图片非常模糊,可以尝试在AirtestIDE的 选项--设置 中,把 手机设备显示分辨率 调成2000,之后再重新连接设备,查看截图清晰度是否有所改善。

如未改善,还可以查看设备连接窗口的设备画面是否清晰,如还是非常模糊的话,可以先断开连接,然后在 conncet 之前勾选 use javacap ,之后再尝试截图。

13)如何显示坐标

顶部菜单栏,选项-设置,只勾选实时坐标显示,则显示绝对坐标;同时勾选实时坐标和相对坐标,则显示相对坐标。(Airtest使用绝对坐标系,poco使用相对坐标系)

  1. # 点击坐标为[100,100]的位置
  2. touch([100,100])
  3. # 点击屏幕中心[0.5,0.5]
  4. poco.click([0.5,0.5])

显示坐标

目前该功能仅适用于Android和iOS设备,不适用于Windows桌面/应用。

2. Airtest常见问题

1)用Airtest测试iOS一定要用macOS吗?

① 使用 xcode 部署 iOS-Tagent/appium的wda 需要在macOS完成

② 部署好以后可以在macOS、Windows或者Linux机器上连接到iOS手机进行测试

脱离Mac启动 wda的工具推荐: tidevice

2)Airtest报告可以导出发给别人看吗?

默认生成的Airtest是本地报告,直接打包给别人查看会丢失一些图片资源/静态资源文件,导致无法正常查看报告;但是我们也可以将报告导出后发给别人看:

① 在IDE一键导出Airtest报告

在IDE点击 查看报告 按钮生成HTML格式的报告之后,我们可以右键单击脚本名称,一键 导出报告

image-20211211145507056

② 命令行使用—export参数导出报告

如果是命令行运行脚本,运行脚本之后,我们可以在生成报告的命令中传入 --export 参数,这样就可以将 包含静态资源文件和图片文件的报告 导出到一个指定的文件夹内,之后直接将整个文件夹发送给别人观看即可。

如果生成报告时不传入 --export 参数,那么报告中的静态资源文件和图片文件将使用 绝对路径 来访问,此时将整个文件夹发给别人观看,别人也是无法正常观看的。

③ 生成报告时添加export_dir参数

我们还可以在脚本添加生成报告的语句,添加export_dir参数,导出我们的测试报告:

  1. h1 = LogToHtml(script_root=r'D:\test\report01.air', log_root=r"D:\test\report01.air\log", export_dir=r"D:\test\report02" ,logfile=r'D:\test\report01.air\log\log.txt', lang='en', plugins=None)
  2. h1.report()

3)pip install -U airtest 报错/无限超时

使用 pip 命令安装Airtest,如果出现报错,优先检查当前的python版本,目前我们支持3≤python≤3.9,不支持python3.10。

如当前使用的python环境是3.9,可能出现 ImportError: numpy.core.multiarray failed to import 的报错,可以手工将 numpy 版本号降级至1.19.3,再来安装airtest库。

  1. pip install -U numpy==1.19.3

如果安装Airtest时出现无限超时的问题,可以考虑配置 清华源 (或者其它国内源)来解决。

image

  1. pip install -i https://pypi.tuna.tsinghua.edu.cn/simple airtest

4)图像识别不准确

请参考官方公众号“AirtestProject”的教程推文:

3. Poco常见问题

1)poco无限重启的解决办法

① 如果开了网络代理的话,需要先 关闭各种代理和VPN ,否则可能会影响到poco通讯

② 检查手机助手内是否对 pocoservice.apk 做了限制,例如在某版本的华为手机中需要开启 允许自启动允许后台活动

这里我们列举几个常见手机品牌的设置方式:

  • 华为:手机管家-应用启动管理-PocoService.apk-手动管理,允许自启动开启,允许后台活动开启
  • OPPO:设置-电池-应用耗电管理-PocoService.apk-允许应用自启动,允许完全后台行为
  • VIVO:电池-后台高耗电-> PocoService 开启
  • 一加:设置-电池优化-PocoService-不优化

当然,不同手机品牌,甚至同品牌不同型号手机的配置方式,都有可能不大一样,同学们要自己查找手机里面与 电池优化后台活跃 相关的设置即可,保证给 pocoservice.apk 足够的活跃权限且不被电池优化行为干掉。

不能和uiautomator同时启动,否则会相互冲突

④ 可以尝试 重启手机 / 重装pocoservice 看看是否会恢复

2)poco脚本运行很慢

请将运行环境的pocoui更新至最新版本,我们会不断在新版本中优化这个运行效率的问题。

如使用AirtestIDE自带环境,则更新AirtestIDE至最新版本;

如使用本地python环境,则直接使用下述命令更新至最新版本:

  1. pip install -U pocoui

3)pocoservice.apk可以在哪里找到

在解压的AirtestIDE文件夹内,我们可以找到pocoservice.apk的文件:

image-20211217150442144

在安装了pocoui的本地python环境中,我们也可以在下述路径中找到pocoservice.apk的文件:

image-20211217153100134

4)poco定位报错找不到

  • 有时候IDE自动生成的poco定位脚本会非常长,层级也非常深,回放时可能出现找不到控件的情况;这时不建议同学们直接使用自动生成的定位脚本,可以根据UI树详情,另外编写更精简的定位脚本,推荐使用正则匹配来进行脚本定位会好一些。
  • 如果定位脚本是同学们自己编写的,请检查对应的属性或者层级关系,看是否是脚本错误而导致找不到元素。
  • 如出现单独选中调试脚本,可以找到控件,但实际运行脚本又容易找不到控件,建议在该条定位脚本之前添加足够的 sleep() ,确保画面跳转稳定后,再来查找控件。

5)poco拿不到控件,poco的支持情况

目前只有Android和iOS原生应用可以直接使用poco(无需接入pocoSDK),非原生应用,比如各种游戏应用、H5小程序、混合开发的应用等,都不能直接使用poco拿取控件,绝大多数的游戏支持接入对应引擎的pocoSDK之后,可以获取控件信息。

6)辅助窗没有刷出UI树

  • 除原生应用之外,其余引擎渲染的应用都需要接入Poco-SDK才可以查看UI树;
  • 检查手机上是否已经自动安装上poco初始化相关的apk(pocoservice.apk),未安装要手动安装上;
  • 安装输入法 Yosemite 并设为默认输入法
  • 部分厂商的手机需要额外的设置,请参考官方文档:AirtestIDE使用文档—设备连接—Android连接常见问题。

7)辅助窗Poco树的刷新时间

UI树的默认刷新时间为2秒,可以在 选项--设置--poco ,里面设置,设置完成后记得点击OK保存设置。

image

8)Poco控件的定位方式

poco支持用基本选择器、相对选择器和空间选择器来编写定位脚本,另外还支持用正则表达式来匹配控件。详细教程和实例可以查看官方公众号的教程推文:

9)no moudle named ‘poco.drivers’

如在运行脚本过程中出现 no moudle named 'poco.drivers' 的报错,则表示当前python环境误装了poco库,未安装pocoui库。

需要注意的是,poco框架的库名为pocoui ,并不是poco,此时需要卸载掉poco库,安装正确的pocoui库即可:

  1. pip uninstall poco
  2. pip install pocoui

10)如何判断当前该选用哪种poco模式

IDE的poco辅助窗内,给同学们提供了多种poco模式:

image

其中,如果我们测试的是安卓原生应用,则选取其中的Android模式即可,安卓的微信小程序也是选择此模式,且该模式不需要应用额外接入poco-sdk;

如果我们测试的是iOS原生应用,则选取其中的iOS模式即可,但目前不支持测试iOS微信小程序,所以iOS模式仅适用于测试iOS原生应用的情况,应用也无需额外接入poco-sdk;

其余模式,如unity、UE4、Cocos-lua等,指的是所测游戏项目的引擎类型,使用这些模式时,要求在游戏项目中接入对应的poco-sdk,并且打出项目包安装在设备上之后,才能使用,比如使用unity模式获取unity游戏项目的控件树:

image

4. 其它常见问题/报错

1)RuntimeError:minitouch setup timeout

出现这个报错,最常见的是以下俩种情况:

① 手机系统是MIUI11,此时我们需要在点击 connect 按钮之前,把 use Javacap + use orientation 这两个选项勾选上,再点击 connect 按钮即可正常使用

② 手机的安卓版本是Android10,此时仅需要把IDE更新到最新版本即可;如果IDE使用的是本地的python环境,那还需要把本地python环境的Airtest更新到最新版本。

image

2)minicap serve setup time out

屏幕初始化失败,常见于高版本MIUI设备或者模拟器等;先检查当前IDE是否为最新版本,不是请把IDE更新到最新版本;然后再尝试在connect设备之前,下拉勾选 use javacap ,再连接设备。

3)Javacap server setup timeout

设备不适用于 javacap ,在IDE连接设备之前 请勿勾选 use javacap ,脚本连接设备的字符串也不要带 ?cap_method=JAVACAP。最后请确保当前使用的是最新版本的airtest。

2)Windows上import win32api报错

如果在Windows平台上使用了某些版本的本地Python环境,会出现如下的报错信息:

  1. <Module>
  2. import win32api
  3. ImportError: DLL load failed: 找不到指定的程序。

如果直接复制dll文件到System32目录下的话,可能会出现airtest里可以使用win32api,但本地Python无法使用的情况。 我们建议您运行下列指令,更新为223版本的pywin32

  1. pip uninstall pywin32
  2. pip install pywin32==223

3)本地pip list可以找到airtest,但pycharm里找不到这个库

很多同学都遇到过这个问题,明明在本地命令行使用 pip list 可以看到已经安装了Airtest库,但是在自己的pycharm里面却找不到Airtest这个库。 这种情况很有可能就是你的 pycharm使用了虚拟环境的解释器

你可以随意运行1个项目,然后查看运行结果窗口显示的解释器是不是你在本地安装的解释器的路径,如果不是,一般会带有 venv 的字样,例如:

  1. D:\test\vene\Scripts\python.exe D:\test\test.py

这种情况只需要将pycharm从虚拟环境切换到安装了Airtest的本地环境即可。

4)如何检查adb是否连接上设备

使用AirtestIDE连接安卓设备之前,需要确保ADB已经连接上了设备。

① 我们可以使用 adb devices 来查看设备情况,如果仅仅提示 List of devices attached,则表明ADB未连接上任何设备;此时需要检查手机上的 USB调试 功能是否已开启,或者换一根USB数据线;

② 如果ADB已连接上设备,那么执行 adb devices 后,会显示已连接设备的列表:

  1. List of devices attached
  2. SJE5T17B17001648 device
  3. SJE5T17B17001650 device

5)’NoneType’ object has no attribute xxxx

这个报错可能出现在不同的方法里面,比如:

  1. AttributeError: 'NoneType' object has no attribute 'snapshot'
  2. AttributeError: 'NoneType' object has no attribute 'start_app'

出现这些报错,基本上都是因为同学们在脚本中没有连接设备,所以只要在脚本开头,补充上连接设备的脚本即可。

6)指定python环境安装第三方库

很多情况下,同学们的电脑里面可能安装了不止一个python环境,比如同时存在python2和python3,要在指定的python环境下安装第三方库,可使用如下命令:

  1. python3 -m pip install airtest # 在python3环境下安装airtest库
  2. python2 -m pip install airtest # 在python2环境下安装airtest库

除了从命令层面来区分以外,更直接的办法是同学们自己去对应的python目录下,用那个目录下的pip.exe来安装。

7)invalid syntax

典型的python语法错误,常见于脚本未换行、缩进错误、缺少一边 " 或者 等。