答疑第四期 | 使用Airtest最常見的8大問題


前言

本期答疑目錄:

  • 1.如何取消腳本執行過程刷新的大量log信息
  • 2.IDE自帶的查看應用包名的功能
  • 3.IDE的腳本編輯和log查看窗口顯示空白
  • 4.webdriverAgentRunner報NSInaliArgumentException
  • 5.Airtest版本為1.1.3,部分手機出現錄屏失敗
  • 6.輸入密碼時Airtest不顯示密碼鍵盤
  • 7.如何模擬鼠標右鍵
  • 8.局部截圖/區域截圖

1.如何取消腳本執行過程刷新的大量log信息

在腳本運行的時候, Airtest 默認會刷新很多log信息,如下圖所示:

如果你不想這些log信息干擾你提取有效的報錯信息時,你可以在腳本代碼開頭加上log級別的設定:

# -*- encoding=utf8 -*-
__author__ = "user"
import logging
logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)
from airtest.core.api import *
auto_setup(__file__)

 

這樣運行時只會在初始化手機時會有少量log輸出,初始化完畢后就能夠對logger進行過濾了。

2.IDE自帶的查看應用包名的功能

大家經常會使用 start_app("包名") 來啟動待測應用,而這個包名需要我們用命令去獲取。

實際上,我們還可以通過IDE自帶的一個 Android助手 ,幫助我們快速獲取已連接設備上的應用包名。

連接上待測的安卓設備以后,點擊右上角的手機助手,然后再點擊 打開Android助手 選項:

之后我們就可以在彈出的窗口中查看到設備上的應用包名:

另外,我們還可以在設備上打開想要獲取包名的應用,之后點擊安卓助手右下方的 refresh 按鈕,即可看到當前打開應用的 package 和 activity :

3.IDE的腳本編輯和log查看窗口顯示空白

有些同學在啟動IDE后,發現不能夠看到腳本編輯窗口和log查看窗口中的文字,就像下圖這樣:

包含啟動后閃退在內,這些問題大概率都是由顯卡兼容性問題導致的。我們可以通過雙擊文件夾中的 兼容性模式啟動.bat 腳本就能夠正常啟動AirtestIDE。

並且,在1.2.3版本的IDE中,我們在設置中新增了一個選項:

默認情況下會選擇 default 模式。如果啟動有問題的用戶,可以嘗試選中下拉菜單中的另外三個選項,並且重啟AirtestIDE,查看接下來是否能正常顯示腳本編輯窗口和log查看窗口。

如果能夠生效,未來啟動AirtestIDE時都將會以這個配置項來啟動,無需每次都手工雙擊 兼容性模式啟動.bat 腳本來啟動AirtestIDE了。

4.webdriverAgentRunner報NSInaliArgumentException

出現這個錯誤的原因大多是使用了11.4.1版本的xcode:

目前(2020-05-12)這個版本的xcode還不兼容,根據最近一次的更新,xcode和iOS的支持情況如下,只要將xcode換成兼容版本即可:

5.Airtest版本為1.1.3,部分手機出現錄屏失敗

使用1.1.3版本的Airtest,部分手機用 --recording 參數對設備進行錄屏操作時,會出現如下報錯:

這些手機需要點開安裝好的 Yosemite.apk ,然后給一個開啟錄屏的權限。(1.1.3版本的錄屏操作由 Yosemite 完成)。

6.輸入密碼時Airtest不顯示密碼鍵盤

有同學反饋,腳本運行到輸入密碼時,手機彈出了安全鍵盤,但是在Airtest中卻不顯示這個安全鍵盤,這是為什么?

其實這個是正常現象,Airtest不會錄制有安全鍵盤的畫面,但是各種輸入操作還是正常進行的。

7.如何模擬鼠標右鍵

pywinauto.mouse 這個模塊給我們提供了各種模擬鼠標操作的方法,例如大家常問的右鍵操作,就可以使用這個模塊的 right_click() 方法:

首先我們需要獲取當前連接的窗口,然后再調用 right_click() 方法實施鼠標右鍵點擊操作:

from airtest.core.api import *
auto_setup(__file__)
# 獲取當前連接的窗口
dev = device()
# 拿到鼠標,並模擬鼠標的右鍵點擊操作
dev.mouse.right_click(coords=(1920,100))

 

更多模擬鼠標或者鍵盤的操作,可以參考我們往期的推文: “如何用python模擬鼠標和鍵盤的操作” 。

8.局部截圖/區域截圖

局部截圖或者說按坐標截圖是大家經常會問到的問題,Airtest提供了 crop_image(img, rect) 方法可以幫助我們實現局部截圖:

舉個例子,我們想要截取手機屏幕中被紅框圈中位置的截圖:

我們可以這么實現:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
# crop_image()方法在airtest.aircv中,需要引入
from airtest.aircv import *

auto_setup(__file__)
screen = G.DEVICE.snapshot()

# 局部截圖
screen = aircv.crop_image(screen,(0,160,1067,551))
# 保存局部截圖到log文件夾中
try_log_screen(screen)

 

結果如圖:


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


免責聲明!

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



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