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

操作元素時元素被移除的報錯。上面我們說了,操作元素時最好先等待,再操作。但偶爾會出現你等待的時候它在,等你要去操作的一瞬間,它沒了,就會報這個錯。

 

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

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章