Airtest連接Windows窗口(應用)


基本原理

AirtestIDE對普通Windows應用程序的測試支持,主要依靠圖像識別框架(Airtest)進行位置定位,使用 pywinauto的操作接口進行模擬操作。

 

 

 

在IDE中連接Windows窗口


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

一、嵌入式連接

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

圖片

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

圖片

二、無嵌入式連接

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

圖片

三、桌面模式

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

  

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

圖片

 

四、接入了poco-SDK的Windows窗口

有一些Windows-app已經接入了Poco(例如Unity游戲窗口),我們同樣能夠使用AirtestIDE來方便地查看和選中UI節點。但是在使用這個功能前,需要事先告訴AirtestIDE這個Windows窗口所在位置以及窗口大小。

在“選項”-“設置”-“Poco”,選擇“Windows Content Area Rect”,框選窗口主畫面后雙擊確認(右鍵/esc可取消),隨后即可開始使用Poco相關功能了,如圖所示:

圖片



連接注意事項

  • 由於在選定窗口時,桌面上可能會有不少同時打開着的其他窗口,導致選擇時的綠色方框不一定能夠很准確地框選到被測應用,請大家在點擊選定窗口按鈕之前,盡可能先把所有其他無關窗口都最小化,這樣做可以讓窗口選擇更准確。
  • 為了防止出現異常情況,請不要選擇自己的桌面、AirtestIDE軟件本體。因為窗口嵌入的功能原理是,將一個Windows窗口設置為IDE的子窗口,因此如果試圖連接桌面,可能會導致無法預料的異常情況發生。如果只是想測試桌面上的所有窗口,可以選擇我們的桌面模式來錄制腳本。

  • 由於Windows窗口在截圖時需要記錄分辨率,因此把窗口嵌入到IDE后大小將會被固定,無法修改。如果覺得嵌入后窗口過大,可以在嵌入之前先將窗口調整至合適大小再進行嵌入。

     

退出Windows連接

  • 直接關閉AirtestIDE即可退出本次Windows連接,並將先前嵌入的窗口自動彈出
  • 也可以通過右上角的Disconnect current device按鈕來退出窗口連接

 

 

用代碼連接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:///"])


---------------------------------------------------------------------------------

關注微信公眾號即可在手機上查閱,並可接收更多測試分享~

 


免責聲明!

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



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