天天看點

Airtest之測試Windows應用程式

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

在成功連接配接上Windows視窗後,就相當于我們已經連接配接上了一台裝置,接下來可以對它進行腳本的錄制與回放了。

生成截圖語句

首先,

touch

 / 

wait

exists

assert_exists

assert_not_exists

等Airtest帶有截圖的語句,與在Android/iOS裝置上錄制并沒有太大差別:

Airtest之測試Windows應用程式

但是需要注意的是,在使用滑鼠拖拽框選好想要截圖的位置後,需要輕按兩下該截圖區域才能完成截圖,而不會在滑鼠松開時自動完成截圖,這也是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

可以參考下圖:

Airtest之測試Windows應用程式

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

在AirtestIDE的Windows模式中,運作腳本和檢視報告與其他平台并無不同:

Airtest之測試Windows應用程式

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

這就意味着,假如我們用某個視窗嵌入到AirtestIDE裡寫出了一個腳本,雖然這次可以直接運作,但是通過複制AirtestIDE裡的腳本指令行的方式,是無法保證下一次還能夠運作的。因為AirtestIDE裡的指令行,将會有這樣的參數内容

--device Windows:///句柄

,而下次再打開視窗,可能句柄已經發生了變化。

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