之前已經介紹過如何連接配接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:///句柄
,而下次再打開視窗,可能句柄已經發生了變化。
# 連接配接一個Windows視窗,視窗句柄為123456
Windows:///123456
# 連接配接一個Windows視窗,視窗名稱比對某個正規表達式
Windows:///?title_re=Unity.*
# 連接配接windows桌面,不指定任何視窗,對應IDE的桌面模式
Windows:///