Airtest+Poco常见Exception报错
以下基于
python3.8;airtestIDE1.2.13;airtest1.2.4;pocoui1.0.85
今天来说说使用Airtest和Poco框架时常见的Exception,方便以后大家排查问题。
首先我们来看看一个报错长什么样子
Traceback (most recent call last):
File "D:/code/Airtest/airtest_1/airtest_python.py", line 17, in <module>
connect_device("Android://127.0.0.1:5037/1ae7be68")
File "D:\soft\Miniconda2\envs\py38\lib\site-packages\airtest\core\api.py", line 68, in connect_device
dev = init_device(platform, uuid, **params)
File "D:\soft\Miniconda2\envs\py38\lib\site-packages\airtest\core\api.py", line 37, in init_device
dev = cls(uuid, **kwargs)
File "D:\soft\Miniconda2\envs\py38\lib\site-packages\airtest\core\android\android.py", line 46, in __init__
self.adb.wait_for_device()
File "D:\soft\Miniconda2\envs\py38\lib\site-packages\airtest\core\android\adb.py", line 303, in wait_for_device
raisefrom(DeviceConnectionError, "device not ready", e)
File "D:\soft\Miniconda2\envs\py38\lib\site-packages\airtest\utils\compat.py", line 55, in raisefrom
raise_from(exc_type(message), exc)
File "<string>", line 3, in raise_from
airtest.core.error.DeviceConnectionError: 'device not ready'
最上面的第2、3行
File "D:/code/Airtest/airtest_1/airtest_python.py", line 17, in <module>
connect_device("Android://127.0.0.1:5037/1ae7be68")
显示本次运行的.py文件,以及是在该文件17行的connect_device
最先出现的错误
之后下面每一个File就是最上面那个报错文件依次调用的地方
最后一行
airtest.core.error.DeviceConnectionError: 'device not ready'
表示这个报错类型是DeviceConnectionError
,从字面理解就是设备连接错误
报错描述device not ready
报错的路径是airtest.core.error
我们需要关心的就是报错类型和报错描述了,一般情况下看这2个基本就能明白大概是什么原因导致的报错,再结果代码上下文就可以Debug了。
扩展阅读:Python 异常处理
下面不再具体给出报错堆栈例子,只讲报错类型,大家以后遇到问题对号入座即可。
Airtest框架
DeviceConnectionError
因为设备连接符写错、设备物理连不上等原因导致的设备连接问题,都会报这个错。
TargetNotFoundError
Airtest框架最常见的一个了,图片找不到的时候,就会报这个错误。
最常见的两个原因:一个是页面(画面)出现太慢或太快,导致去查找的时候确实没有;一个是图像存在,但threshold阈值不达标。
AdbError
ADB命令执行时出错。Android很多API底层其实是基于ADB实现的,所以不要疑惑你没调用ADB,可能Airtest底层调用了。
AdbShellError
adb shell命令执行时出错。ADB有些命令是要进入adb shell才能执行的。
扩展阅读:ADB命令大全
ScreenError
截屏时可能会出现的错误
MinicapError
安卓底层Minicap相关报错
扩展阅读:Airtest源码分析--Android屏幕截图方式
MinitouchError
安卓底层Minitouch相关报错
Poco框架
InvalidOperationException
无效操作时出现的报错,比如一个长列表,末尾的元素在屏幕外,你却要点击;又或者一个图片元素,你却当输入框去设置它没有的text属性。
PocoNoSuchNodeException
元素不存在的报错,比如你把元素属性写错了,肯定找不着;或者是页面(画面)出现太慢或太快,导致你要操作的元素当时未找到。避免这个问题的最好办法就是先等待元素出现了,再去操作
扩展阅读:Poco API精讲之 等待 wait
PocoTargetTimeout
等待元素超时,这个异常只会在你主动等待元素出现或消失时抛出,和PocoNoSuchNodeException
不一样,当你的操作速度太快,界面来不及跟着变化的话,你只会遇到PocoNoSuchNodeException
而不是PocoTargetTimeout
总结:PocoTargetTimeout
是等待时元素不存在的报错;PocoNoSuchNodeException
是操作时元素不存在的报错
PocoTargetRemovedException
操作元素时元素被移除的报错。上面我们说了,操作元素时最好先等待,再操作。但偶尔会出现你等待的时候它在,等你要去操作的一瞬间,它没了,就会报这个错。
---------------------------------------------------------------------------------
关注微信公众号即可在手机上查阅,并可接收更多测试分享~