最近负责项目组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