最近負責項目組Windows App自動化測試框架搭建工作,在這里簡單地把這個過程中參考的資料整理起來,僅僅是搬運工,感謝大牛們分享的資料。 同時也記下自己遇到的一些問題和解決辦法。
Windows App 自動化工具選取
11種免費Window App自動化工具介紹(英文版): https://testguild.com/automation-tools-desktop/
9種 https://www.logigear.com/blog/test-automation/12-best-automation-tools-for-desktop-apps-in-2020/
12 種 https://blog.testproject.io/2016/12/22/9-free-desktop-test-automation-tools/
因為我所做項目測試的APP是部署在server端,需要在測試機上遠程訪問server,這方面對工具的選取有很大限制, 所以我選了集成在Appium里的WinAppDriver,因為可以用到Appium的遠程訪問功能。 個人覺得如果用Microsoft UI automation會方便些,它里面定義了各種各樣的控件(Button, TreetMenu等),基本上直接調用現成的接口就可以了,不需要花太多精力做二次開發,但它不能遠程訪問。用WinAppDriver需要二次開發,大部控件都要自己定義,需要編碼能力。我花了很多時間去調查是否可以Mirosoft UI automation和Appium結合起來用, 但是沒有找到方法, 如果有朋友有找到合適的方法,歡迎一起探討。
Mirosoft UI automation
花了一些時間研究Mirosoft UI automation, 這里順帶把之前參考資料列出來
1. 官網介紹: https://docs.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-fundamentals
2. 詳細說明和例子
3. 簡單明了的中文介紹:
https://blog.csdn.net/ffeiffei/article/details/6637418
WinAppDriver
官網介紹: http://appium.io/docs/en/drivers/windows/
Winappdriver總體介紹, 環境搭建,代碼樣本, 注意事項:
環境安裝
1. 安裝Node.js 和Appium :
https://www.cnblogs.com/liuhui0308/p/11981195.html
建議Appium的非GUI和GUI版都安裝,我們用的一般是非GUI,但是有時候可以用GUI版本定位問題,比如通過Appium session定位元素。
2. 安裝WinAppDriver (官網上WinAppDriver是集成在Appium, 安裝了Appium,是不需要再安裝WinAppDriver,但是我安裝了Appium后,運行程序會提示WinAppDriver未安裝,可能是版本問題)
參考 :https://www.cnblogs.com/nanshufang/p/winappdriver.html
基本步驟流程
1, 安裝Nodejs
2. 安裝Appium
3. 安裝WinAPPDriver(雖然Appium官網說不用單獨安裝這個,但是我試了不安裝會遇到問題)
4. 我是用C#, 在vs2015(2017)里新建一個工程,並把通過Nuget安裝上Appium driver.
具體設置過程參考: http://appium.io/docs/en/drivers/windows/
5. 啟動Appium
6. 開啟開發者模式
7.啟動WinAppDriver.exe(這一步一般是不需要的,如果報WinAppDriver沒起來或沒安裝可以試一試)
在C:\Program Files (x86)\Windows Application Driver, 可以雙擊里面的WinAppDriver.exe文件
8. 環境好啦,開始寫測試代碼
定位元素-SDK-Inspect.exe
官方介紹: https://docs.microsoft.com/en-us/windows/win32/winauto/inspect-objects
這里要注意:我發現有些朋友說裝了SDK后沒有找到inspect.exe, 我猜是因為有幾個版號,沒有找對文件夾,下圖是我電腦上實際找到的位置(找版號最大的,沒找到的話,把這幾個文件夾都看一下)
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86
遇到的問題和解決辦法
1. 安裝完appium,執行代碼,報以下錯誤:
An unknown server-side error occurred while processing the command. Original error: Could not verify WinAppDriver install; re-run install
解決辦法:下載安裝WinAppDriver
https://github.com/microsoft/WinAppDriver/releases/tag/v1.2-RC
Appium官方文檔是說Appium上有內置了WinAppDriver,不用單獨安裝。還有如果只裝了GUI Appium,也會報這個錯,最好裝非GUI版本。
2. Error:
Message: Test method Winformtest.CalculatorSession.TestMethod3 threw exception: OpenQA.Selenium.WebDriverException: Unexpected error. The URL '/session' did not map to a valid resourcer
原因:
url 錯了
//private const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";
改成: private const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723/wd/hub";
3. 設置待測試APP的路徑:
appOptions.AddAdditionalCapability("app", @"C:\Program Files(x86)\....... \****.exe");
報錯:
OpenQA.Selenium.WebDriverException: An unknown server-side error occurred while processing the command. Original error: The system cannot find the file specified
這個是我犯的低級錯誤,目錄中的(x86)前面有一個空格,加上空格就好了,為了解決這個問題費了好多時間,一開始還以為自己的方法不對。像這樣路徑之類信息一定要復制, 不能手動輸入
4. 之前跑都可以的,可以執行點擊或者雙擊,突然執行click()就報
An unknown error occurred in the remote end while processing the command
如果是Actions, 執行doubleclick() 就報Access Denied
Element 實際是有找到的,因為代碼都沒改變,環境也沒變
網上找了有很多人遇到類似的問題,特別是遠程的時候,如果測試本地沒問題,看了解答的,都沒有找到根本原因,有時候莫名其妙就好了,有說重啟電腦,切換語言的。
我的解決辦法:同樣的代碼,換成在本地跑,是可以過的,於是又切換成server上,發現也好了,莫名其妙的, 后面發現如果把待測APP所在server(我們用的是虛擬機)的窗口關閉或者最小化,就會報這個錯,如果保打開狀態,就沒問題
所以我的解決辦法是:保持待測試APP所在server(機器)窗口打開。
下面是網上找一些辦法,但是不能解決我的問題,也許能解決其他朋友的問題,列在這。
https://github.com/Microsoft/WinAppDriver/issues/361
https://github.com/Microsoft/WinAppDriver/issues/357
https://github.com/microsoft/WinAppDriver/issues/892
https://github.com/microsoft/WinAppDriver/issues/907