Airtest+Poco常见Exception报错

上期回顾:Poco API精讲之元素树冻结freeze()


以下基于
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阈值不达标。

扩展阅读:Airtest-API精讲之Template

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

操作元素时元素被移除的报错。上面我们说了,操作元素时最好先等待,再操作。但偶尔会出现你等待的时候它在,等你要去操作的一瞬间,它没了,就会报这个错。

 

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

posted @ 2022-06-18 19:17  ☆星空物语☆  阅读(1295)  评论(0编辑  收藏  举报