Airtest快問快答,你們想問的這里都有!(第2期)


本期我們又給同學們整理了答疑Q群中15個最常問的問題,包含 如何處理設備狀態異常如何選擇備選的連接參數 、如何進行 多圖查找 或者 多元素查找 等等,后續我們還會持續整理更多常見問題幫助大家避坑噠~

27.如何清空輸入框的文本

Airtest的方式:

for i in range(10):
    keyevent("67")
    
# 或者
for i in range(10):
    keyevent("KEYCODE_DEL")

Poco的方式:

# 將輸入框內容設置為空字符串,poco("xxx")為輸入框的元素定位語句
poco("xxx").set_text("")

28.設備的3種狀態:device、unauthorized、offline

1)device:設備在線可連接

通常情況下,我們使用 adb devices 命令在命令行查看與本機連接的設備詳情,或者在Airtest IDE的設備連接窗口查看當前設備列表時,只有設備狀態為 device 的設備,才是與本機正常連接且可通訊的設備:

2)unauthorized:未允許USB調試

如果開啟了手機的 USB調試 選項並且用USB線連接好了設備和電腦,卻發現設備狀態為 unauthorized ,則表示未處理 允許USB調試 的彈窗,允許該彈窗即可:

3)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/device_connection/1_android_phone_connection/#3

29. no moudle named 'poco.drivers'

如在運行腳本過程中出現 no moudle named 'poco.drivers' 的報錯,則表示當前python環境誤裝了poco庫,未安裝pocoui庫。

需要注意的是,poco框架的庫名為pocoui ,並不是poco,此時需要卸載掉poco庫,安裝正確的pocoui庫即可:

pip uninstall poco
pip install pocoui

30.安裝指定版本的庫

命令如下:

pip install -U airtest==1.1.6

31.使用IDE截圖特別模糊如何處理

如果同學們發現使用IDE截出來的圖片非常模糊,可以嘗試在AirtestIDE的 選項--設置 中,把 手機設備顯示分辨率 調成2000,之后再重新連接設備,查看截圖清晰度是否有所改善。

如未改善,還可以查看設備連接窗口的設備畫面是否清晰,如還是非常模糊的話,可以先斷開連接,然后在 conncet 之前勾選 use javacap ,之后再嘗試截圖。

32.如何判斷當前該選用哪種poco模式

IDE的poco輔助窗內,給同學們提供了多種poco模式:

其中,如果我們測試的是安卓原生應用,則選取其中的Android模式即可,安卓的微信小程序也是選擇此模式,且該模式不需要應用額外接入poco-sdk;

如果我們測試的是iOS原生應用,則選取其中的iOS模式即可,但目前不支持測試iOS微信小程序,所以iOS模式僅適用於測試iOS原生應用的情況,應用也無需額外接入poco-sdk;

其余模式,如unity、UE4、Cocos-lua等,指的是所測游戲項目的引擎類型,使用這些模式時,要求在游戲項目中接入對應的poco-sdk,並且打出項目包安裝在設備上之后,才能使用,比如使用unity模式獲取unity游戲項目的控件樹:

33.如何安排腳本初始化、poco初始化和啟動應用的順序

很多新手在使用poco的時候,都容易把連接設備、初始化poco和打開應用的腳本順序搞亂,導致出現一大堆奇妙的報錯。

比如大家最常見的:“遠程主機強迫關閉了一個現有的連接”“socket connection broken” 等等。

最正確的順序是:先連接設備(一般在 auto_setup 接口里面連接)--> 再打開應用(一般用 start_app 接口)--> 等應用開啟完畢,最后才初始化 poco

# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *

# 連接設備
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP"])

#啟動應用
start_app("com.NetEase")
sleep(6.0)

# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

poco("btn_start").click()

所以同學們在初始化poco的時候,千萬記住要檢查下這幾條代碼的順序,避免產生不必要的報錯。

34.同一個腳本初始化多個poco

在同一個腳本內,支持初始化多個不一樣的poco,比如 Android poco 和 unity poco,就是可以共存的:

from airtest.core.api import *

auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554?cap_method=MINICAP_STREAM&&ori_method=MINICAPORI&&touch_method=MINITOUCH"])

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
A_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

sleep(1.0)

A_poco("poco").click()
sleep(2.0)

from poco.drivers.unity3d import UnityPoco
U_poco = UnityPoco()

U_poco("btn_start").click()

但是我們不能在同一個腳本內,反復初始化相同的poco,比如多次初始化Android poco,就有可能導致奇奇怪怪的錯誤出現。

35.指定python環境安裝第三方庫

很多情況下,同學們的電腦里面可能安裝了不止一個python環境,比如同時存在python2和python3,要在指定的python環境下安裝第三方庫,可使用如下命令:

python3 -m pip install airtest # 在python3環境下安裝airtest庫
python2 -m pip install airtest # 在python2環境下安裝airtest庫

除了從命令層面來區分以外,更直接的辦法是同學們自己去對應的python目錄下,用那個目錄下的pip.exe來安裝。

36.三個備選的連接參數

1)備選參數在哪里選擇

在AirtestIDE的設備連接窗口中,點擊connect連接設備之前,單擊connect右側的下拉按鈕,即可找到3個連接設備的備選參數:

2)3個備選參數分別代表什么意思

① 第一個 Use javacap ,是給部分無法正常看到手機畫面、minicap初始化失敗 的手機或設備用的,所以模擬器看到黑屏、部分特殊的平板等設備可以考慮勾選這個選項

② 第二個 Use ADB orientation 是用於 屏幕旋轉 的,如果在安卓手機屏幕旋轉方向檢測有問題、或者是部分特殊的平板無法顯示正確的屏幕方向時可以勾選

③ 第三個 Use ADB touch 是 發送adb指令來點擊屏幕 ,效果很差,速度也很慢,不建議勾選,只有在 部分無法點擊屏幕的特殊安卓設備 上才需要使用(例如智能后視鏡、特殊型號的平板等設備上) 正常情況下,手機都可以點擊,如果無法被點擊(比如小米設備),一般都是因為手機設置有選項漏了打開,特別是小米設備要注意 開啟允許模擬點擊 的設置

3)是不是把備選參數全帶上就能適配所有設備

正常情況下,同學們連接設備是不需要勾選任何備選參數的,我們也不建議大家主動把所有備選參數都勾選上,因為這些備選參數會影響設備連接和使用的效果。

除非是上述提到的特殊情況,比如無法使用minicap的設備,可以通過勾選 use javacap 來連接;常見的需要勾選備選參數的設備,MIUI12的小部分型號,部分模擬器,部分特殊安卓設備等。

4)如何在腳本中添加備選參數

如在IDE連接設備時,勾選了一些備選參數,則同學們在腳本中連接該設備,也要添加對應的備選參數。特別是使用此類設備在命令行運行腳本時,千萬要記得將參數加在設備連接字符串上:

# 添加了3個備選參數的1個安卓設備
Android://127.0.0.1:5037/79d03fa?cap_method=JAVACAP&&ori_method=ADBORI&&touch_method=ADBTOUCH

37.Airtest的多圖查找

Airtest沒有提供專門的API給我們進行多圖查找,但是我們可以用簡單的語法來實現:

picList = [pic1,pic2,pic3]  # 截圖的圖片對象列表
for pic in picList:
     pos = exists(pic)
     if pos:
         touch(pos)
         break  # 只要找到圖片列表中的任何一張圖片,就執行touch

38.poco的多元素查找

poco有專門的API實現了多元素等待:

# 等待多元素其中的任意一個元素出現
bomb = poco("bomb")
yellow = poco("yellow")
blue = poco("blue")

while True:
    fish = poco.wait_for_any([bomb,yellow,blue])
    print(fish.get_name())

# 等待多元素的所有元素都出現
poco.wait_for_all([yellow,blue,black])

39.'NoneType' object has no attribute xxxx

這個報錯可能出現在不同的方法里面,比如:

AttributeError: 'NoneType' object has no attribute 'snapshot'

AttributeError: 'NoneType' object has no attribute 'start_app'

出現這些報錯,基本上都是因為同學們在腳本中沒有連接設備,所以只要在腳本開頭,補充上連接設備的腳本即可。

40.怎么獲取Windows窗口的句柄

1)在IDE的log窗口查看

在IDE中連接上該Windows窗口,然后隨便運行1個自動化腳本,我們可以在log查看窗的最上面,看到運行該腳本的命令,其中包含Windows窗口的句柄:

2)使用網上的工具查看

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

41.UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

編碼報錯,一般情況下我們可以通過在腳本開頭聲明編碼來規避這個問題:

# -*- encoding=utf8 -*-

如該聲明無效,腳本運行到某些 print 中文的語句中,還是會報這個錯誤,可以單獨指定這個中文的編碼:

s = '中文'
print(s.decode('utf-8'))

Airtest官網http://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有雲服務https://airlab.163.com/b2b

官方答疑 Q 群:654700783

呀,這么認真都看到這里啦,幫忙點個推薦支持一下唄,灰常感謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM