Airtest測試Windows窗口翻車?還是想跟你們聊聊測試win窗口的一些問題


前言

很多同學反饋在測試Windows應用窗口的時候,經常遇到 窗口連接不上 、不知道窗口句柄是什么 ,發送 刪除/回車 等 keyevent 的時候總是 不生效 的情況,所以今天我們帶大家一起來看看用airtest測試Windows窗口的常見問題。

1.在IDE中連接Windows窗口

airtest提供了多種連接Windows應用窗口的方法,嵌入式連接和無嵌入式連接等,如果你使用嵌入式連接的方式不能正常連接待測的Windows窗口,比如出窗口被拉伸 、窗口黑屏不能正常錄制腳本 等情況,你還可以選擇用無嵌入式連接或桌面模式。

嵌入式連接

而嵌入式連接又分兩種,一種是“選定窗口”,另外一種是“搜索窗口”。

“選定窗口”的方式很簡單,直接在IDE的Windows窗口連接那塊面板上點擊“選定窗口”,之后再把鼠標移動到待測窗口上,此時待測窗口會被一個綠色的矩形框圈住,單擊鼠標左鍵即可把待測窗口嵌入到我們的IDE

 

當然如果我們不使用“選定窗口”,而是使用其旁邊的“搜索窗口”,IDE則會彈出一個當前所有已打開窗口的title列表,此時我們只需要找到待測窗口的title,然后點擊右側對應的 連接 按鈕即可把應用窗口嵌入到我們的IDE中:

 

無嵌入式連接

無嵌入式連接,即 不用把應用窗口嵌入到IDE 上去,依舊可以對待測應用進行自動化測。在IDE的頂部菜單欄依次選擇 選項--設置--勾選上Windows窗口無嵌入連接--OK ,之后再點擊“選定窗口”,將鼠標移動到待測窗口上並單擊,此時應用窗口沒有被嵌入到IDE中,並且IDE的設備窗口也會自動隱藏起來。之后我們就可以像嵌入窗口那樣對待測應用進行自動化測試操作:

 

桌面模式

假如同學們想要測試的窗口不止一個(即擁有多個不同的窗口句柄),單獨 嵌入/選定 一個窗口可能無法滿足測試需求,此時我們就可以使用“桌面模式”。

點擊桌面模式按鈕,此時AirtestIDE右側的設備窗口將會完全隱藏,進入Windows桌面模式。在此模式下,錄制腳本與運行腳本都與正常情況下沒有區別,只不過執行時將會對整個桌面進行截圖識別,甚至可以識別到AirtestIDE代碼窗口里的截圖語句(因此在執行腳本時,請盡量縮小AirtestIDE的窗口,避免腳本界面里的截圖干擾執行結果)。

2.用代碼連接Windows窗口

使用窗口句柄

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

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

使用句柄連接窗口的腳本我們可以這么寫:

auto_setup(__file__,devices=["Windows:///133194"])

 

但是該連接腳本僅對本次打開的Windows窗口有效,如果Windows窗口被關閉后重新打開,句柄也將會發生變化,該腳本失效。

使用正則表達式

上文我們提到,使用“搜索窗口”連接窗口的時候,IDE會列出當前所有打開窗口的title,我們可以 寫一個正則表達式去匹配到待測窗口的title,並使用這個正則表達式來連接該窗口:

# 例如匹配“吹夢到西洲”后面跟着換行符以外的任意字符的窗口title
auto_setup(__file__,devices=["Windows:///?title_re=吹夢到西洲.*"])

 

大多數情況下,窗口的title比較不容易變化,所以使用正則表達式匹配窗口title來連接待測窗口的腳本,會相對穩定些。

連接整個桌面

如果不需要置頂某個窗口應用的話,我們還可以使用如下代碼直接連接整個桌面來做自動化:

auto_setup(__file__,devices=["Windows:///"])

 

3.在Windows應用上發keyevent

最后我們來看一下在Windows應用上發送 keyevent 的失效的問題。舉個很常見的例子:很多同學反饋,自己想在Windows窗口的某個輸入框內刪除一些字符,所以使用了 DELETE 這個鍵碼,但是實際運行效果是不僅沒有生效,而且還把鍵碼 DELETE 寫到了輸入框里面,這是為什么呢?

其實是因為同學們把Android的按鍵碼和Windows的按鍵碼混淆了。Android的按鍵碼是基於ADB的,而Airtest的Windows模塊則封裝使用了pywinauto 支持的按鍵碼,所以這就導致了 DELETE鍵碼在Android設備中生效,而在Windows窗口就不生效。

 pywinauto 庫中,刪除的鍵碼實際上是 {DELETE} ,所以我們想要在Windows窗口上實現刪除字符的效果,可以這么寫:

keyevent("{DELETE}")

 

更多Windows的鍵碼可以參照下圖,我們可以看到,Windows的鍵碼都是用 {} 框起來的:

 keyevent()中不使用 {} 框起來的字符,都會被當成需要輸入的字符串,被輸入到Windows窗口的輸入框上。

 


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