Airtest之測試Windows應用程序


之前已經介紹過如何連接Windows窗口:Airtest連接Windows窗口(應用)

在成功連接上Windows窗口后,就相當於我們已經連接上了一台設備,接下來可以對它進行腳本的錄制與回放了。

 

生成截圖語句

首先,touch / wait / exists / assert_exists / assert_not_exists等Airtest帶有截圖的語句,與在Android/iOS設備上錄制並沒有太大區別:

圖片

但是需要注意的是,在使用鼠標拖拽框選好想要截圖的位置后,需要雙擊該截圖區域才能完成截圖,而不會在鼠標松開時自動完成截圖,這也是Windows下截圖的最大區別。

因此截圖的步驟是:

  • 拖動鼠標框選合適的區域

  • 雙擊鼠標完成截圖

  • 點擊鼠標右鍵可以重新進行框選

  • Esc按鈕可以退出本次截圖操作

以及,在錄制swipe語句時,在完成截圖區域框選后,需要單擊滑動終點完成語句錄制。

 

 

調用Windows接口

和Android/iOS一樣,Airtest也對Windows下的常用操作進行了封裝,底層操作接口使用的是pywinauto庫。

因此,在編寫Windows應用的測試腳本時,我們可能需要查閱以下幾個API文檔:

  • Airtest的跨平台API,這里的所有API都可以在腳本里直接調用

  • Airtest的Windows專屬API,請查閱后面提供的代碼示例來了解如何調用Windows設備的專屬接口

  • 如果需要更復雜的操作,可能需要查閱pywinauto提供的API

     

一個簡單的示例

為了方便演示,我們假設這個腳本沒有在命令行中傳入參數,而是在腳本里使用connect_device接口來連上一個句柄為123456的窗口,並對它進行一些操作:

from airtest.core.api import *
dev = connect_device("Windows:///123456")
# 通用的接口調用方式,與其他平台相同:
touch(圖片)

假如我們希望能夠調用一些Windows的專屬操作,比如查閱了Airtest的Windows專屬API文檔后,我們發現有一些操作是只有Windows窗口才有的:

# 調用Windows專屬的接口,例如獲取當前窗口的標題內容
print(dev.get_title())
# 把窗口移動到某個坐標位置
dev.move((100, 200))

接下來,假設我們現在想要使用鼠標滾輪,在查閱Airtest的API后發現,Airtest的Windows模塊並沒有封裝鼠標滾輪的功能,此時我們可以進一步查詢pywinauto的文檔,尋找到mouse相關的章節后,就知道如何調用鼠標滾輪接口了:

dev.mouse.scroll(coords=(80, 100), wheel_dist=1)

pywinauto.mouse這個模塊里,還提供了很多常用的鼠標操作的方法:

# 鼠標點擊操作,可以修改coords來指定點擊位置
pywinauto.mouse.click(button='left', coords=(0, 0))
# 鼠標雙擊操作,可以修改coords來指定雙擊位置
pywinauto.mouse.double_click(button='left', coords=(0, 0))
# 移動鼠標,可以修改coords使鼠標移動到指定位置
pywinauto.mouse.move(coords=(0, 0))
# 鼠標右鍵點擊,可以修改coords來指定右鍵點擊位置
pywinauto.mouse.right_click(coords=(0, 0))
# 鼠標滾動操作,可以修改coords來指定滾動位置,修改wheel_dist來指定滾動距離
pywinauto.mouse.scroll(coords=(0, 0), wheel_dist=1)


輸入keyevent

在Android中,我們可以通過keyevent("HOME")來實現按下HOME鍵的操作,而在Windows中,我們同樣可以通過keyevent接口發送一些按鍵響應。Android的按鍵碼是基於ADB的,而Airtest的Windows模塊則封裝使用了pywinauto支持的按鍵碼,請查閱pywinauto.keyboard文檔內容來編寫Windows下的keyevent接口參數:

# 在pywinauto中,符號^也代表了CTRL鍵,因此^a即為全選(Ctrl+A)
keyevent("^a")
# 例如這是刪除鍵的輸入方式,需要加上括號{}
keyevent("{DELETE}")

注意,這里的keyname需要用""括起來。更多keyname可以參考下圖:

 


如何在連接腳本時,指定連接某個窗口

在AirtestIDE的Windows模式中,運行腳本和查看報告與其他平台並無不同:

圖片

然而,最需要注意的一點是:在AirtestIDE里連接的窗口,都是用窗口句柄連接的。窗口句柄是每個Windows窗口對象擁有的獨一無二的32位無符號整數,而且每次打開窗口,這個數值都會變化。

這就意味着,假如我們用某個窗口嵌入到AirtestIDE里寫出了一個腳本,雖然這次可以直接運行,但是通過復制AirtestIDE里的腳本命令行的方式,是無法保證下一次還能夠運行的。因為AirtestIDE里的命令行,將會有這樣的參數內容--device Windows:///句柄,而下次再打開窗口,可能句柄已經發生了變化。

因此,我們也可以不使用句柄,而是通過其他的方式來連接窗口。Airtest的Windows模塊,使用了pywinauto的connect接口來連接窗口,因此除了句柄以外,我們可以通過窗口標題來連接:

# 連接一個Windows窗口,窗口句柄為123456
Windows:///123456
# 連接一個Windows窗口,窗口名稱匹配某個正則表達式
Windows:///?title_re=Unity.*
# 連接windows桌面,不指定任何窗口,對應IDE的桌面模式
Windows:///

在命令行中假如想使用窗口名稱連接,不需要添加引號等符號,直接這樣寫:

airtest run test.air --device Windows:///?title_re=Unity.


免責聲明!

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



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