1. 程式人生 > 實用技巧 >自動化測試實操案例詳解 | Windows應用篇

自動化測試實操案例詳解 | Windows應用篇

前言

之前有同學留言說想看Windows應用的自動化,那麼今天我們就用1個簡單的例子,帶大家一起來看一下Windows應用的自動化究竟有哪些坑。

不過在此之前,希望大家能認真看一下 “如何連線Windows應用視窗” 的教程,裡面詳細描述了多種連線Windows視窗的模式。

因為桌面應用的多樣化,IDE連線各種Windows視窗也會出現各種各樣的問題,同學們在連線Windows視窗時如果出現問題,比如無法嵌入、連線後閃退、連線後窗口被拉伸等等,建議同學們多嘗試幾種連線方式,總會找到一種比較好的連線方式。

另外,因為同學們平常多使用移動裝置進行測試,換成測試Windows應用時,很容易把一些移動裝置才有的介面用到Windows應用上面,導致介面失效,達不到預期效果的情況,下文我們也會詳細跟大家講述一下,幫助大家避坑。

實操

① 需求

我們以網易雲音樂的Windows客戶端為例,實現在網易雲音樂中搜索“薛之謙”,然後找到他的歌單排名,將排名前10的歌曲加入“我喜歡的音樂”列表,之後刪除搜尋框的內容,最後回到網易雲音樂的首頁。

② 在IDE中連線網易雲音樂的應用視窗

為防止其它應用窗口乾擾連線,我們在桌面上只留下IDE視窗和待測的網易雲音樂視窗。然後我們在Windows視窗連線裡選擇 “選定視窗”,再單擊選中網易雲音樂的視窗,嵌入之後發現,網易雲音樂的視窗被嚴重拉伸:

所以我們再嘗試一下另外一種嵌入方法,“搜尋視窗”。點選“搜尋視窗”,在彈出的視窗列表中,選擇網易雲音樂的視窗,再點選連線:

發現可以正常嵌入,所以以後我們可以使用搜索視窗這種模式,來嵌入網易雲音樂的Windows視窗。

③ 需求分析和預期效果
  • 點選搜尋框
  • 輸入“薛之謙”
  • 進入薛之謙的歌曲列表
  • 按排名順序播放排名前10的歌曲
  • 將當前播放的歌曲加入“我喜歡的音樂”列表
  • 再次點選搜尋框,全選文字然後刪除
  • 返回應用首頁

④ 實現的程式碼

知識點分析

① 模擬鍵盤/滑鼠操作

AirtestIDE對普通Windows應用程式的測試支援,主要依靠影象識別框架(Airtest)進行位置定位,使用pywinauto的操作介面進行模擬操作

最常見的就是模擬鍵盤/滑鼠操作了。上述案例中,我們主要使用了模擬鍵盤操作,幫助我們在應用上輸入關鍵詞、使用快捷鍵以及進行全選刪除等操作。

dev = device()

# 輸入搜尋詞,等同於 text("薛之謙")
dev.keyboard.SendKeys("薛之謙")

# 刪除輸入框的內容,等同於 keyevent("^a"),keyevent("{BACK}")
dev.keyboard.SendKeys("^a")
dev.keyboard.SendKeys("{DELETE}")

其中'^' 等同於 {VK_CONTROL},所以"^a"代表的是"ctrl+a",另外pywinauto.keyboard這個模組的詳細內容可以參考此連結:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html#

模擬滑鼠操作在上述示例中沒有涉及,但它的基本用法與pywinauto.keyboard模組是相似的,給大家舉個簡單的例子,模擬滑鼠的右鍵點選操作:

dev = device()
dev.mouse.right_click(coords=(1180, 145))

pywinauto.mouse模組的內容可以參考此連結:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.mouse.html

② 在Windows應用上使用keyevent

之前很多同學跟我們反饋過這樣的問題,為什麼他們在Windows應用上輸入各種keyevent之後,都只是把鍵碼輸入到文字框中,而沒有實現鍵碼的效果呢?

如上圖所示,我們的預期是刪除輸入框的文字,但實際效果是把鍵碼一個個輸入到了輸入框中。其實原因就是我們文章開頭所說的,這個鍵碼是應用在安卓平臺上的,照抄到Windows平臺是不適用的:

而Windows平臺的鍵碼,我們可以參考pywinauto.keyboard這個模組給出的鍵碼合集:

③ 多種截圖技巧

實操示例中,我們使用了多條截圖語句幫助我們在網易雲音樂上進行定位。其中有幾個截圖的小技巧想分享給大家:

第一點,截圖的時候,希望大家儘量減少截入過多的空白背景,空白背景過多容易導致特徵點稀少,進而出現截圖識別位置錯誤的問題。

第二點,截圖並不一定是越小越精準。當畫面中存在多個相似的目標截圖時,我們需要靈活地加入一些輔助內容,幫助我們順利定位到目標。就拿上述示例來說,輸入“薛之謙”後,我們想要點選下拉列表的第二個薛之謙,但是列表中有很多個干擾元素:

此時,細細地去摳含有薛之謙三個文字的截圖就非常不明智了,因為你很難確保程式最終幫你匹配到列表中哪一個位置。但我們嘗試換一下思路,適當地將截圖擴大一些,增加更多的特徵點,讓我們的點選目標依然處於截圖中心,不就可以更準確地定位到我們的目標了嗎?

最後一點,巧用target_pos幫助我們點選截圖的不同位置。預設情況下,程式在畫面上找到截圖目標後,會點選截圖的中心位置,但實際操作中,我們可能需要點選截圖的右下角、中心偏右位置等等,這時候我們只需要設定截圖target_pos的值即可(取值範圍1~9)。

小結

今天的教程內容就到這裡啦,如果同學們還有什麼想看的實操案例,歡迎在公眾號留言,另外需要上述指令碼練手的同學,也可以在公眾號 回覆“網易雲” 獲取示例程式碼。


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