自動化測試實操案例詳解 | 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


免責聲明!

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



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