Appium: Windows系统桌面应用自动化测试(二)
一、关于自动化过程中,打开了应用,但获取不到操作句柄的问题
1、问题描述
(1)下图是通过python脚本连接的不同应用
(2)应用一:有sessionId,说明会话正常,可通过句柄操作应用
(3)应用二:报500错误
(4)报错日志
HTTP/1.1 500 Internal Error
Content-Length: 199
Content-Type: application/json
{"status":13,"value":{"error":"unknown error","message":"Failed to locate opened application window with appId: C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe, and processId: 39628"}}
2、问题分析
(1)网络拓扑图
①应用、WinAppDriver、python脚本都在同一台PC上,他们的关系如下:
python脚本(客户端)《==》WinAppDriver(服务端)《==》应用
②以打开应用为例,首先客户端向服务端发送启动应用的请求,然后服务端打开应用,接着应用给服务端反馈情况,最后服务端给客户端操作句柄
③问题的原因是什么呢?是服务端报了500错误,接着反馈给客户端转发信息如下:
selenium.common.exceptions.WebDriverException: Message: Failed to locate opened application window with appId: C:\Program Files (x86)\IDMVS\Applications\Win64\IDMVS.exe, and processId: 27104
④即打开了应用,但无法定位到该应用
(2)原因分析
①可能是应用拒绝了向服务器反馈,服务器等不到结果而报500错误
②短时间内,服务器捕获不到应用反馈,就已经结束了会话
③服务端没有权限捕获该应用
④软件路径相关
3、问题解决
①实验一:打开该软件同一目录下的软件,获取句柄正常,认为与软件路径无关
②实验二:管理员方式运行服务端,获取失败,认为与服务端权限无关
③实验三:通过python脚本延长超时等待,获取失败,认为与应用反馈时间无关
(PS:剩下的怀疑对象是应用本身,这个就有点束手无策了。只能继续做实验,尝试排查)
④实验四:以管理员身份运行appium作为客户端,尝试解决,报错信息与python脚本一致
⑤实验五:使用appium作为客户端通过改变配置参数进行解决,再次失败
配置参数文档见如下链接:
appium/appium-windows-driver (github.com)https://github.com/appium/appium-windows-driver#windowsdriver-specific-capabilities
⑥实验六:重新安装,甚至更换X86的WinAppDriver,再运行,均失败
二、尝试回归问题本身,去解决问题
1、目标应用日志
重新运行脚本,没有生成新的日志,因此无法通过其得到有用信息
2、通过查看win系统自带的系统日志,尝试解决
操作脚本,还是没有日志生成
3、查看WinAppDriver日志
(1)当只给app参数的时候,报如下错误
{"capabilities": {"alwaysMatch": {"appium:app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "appium:deviceName": "WindowsPC", "platformName": "Windows"}, "firstMatch": [{}]}, "desiredCapabilities": {"app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "deviceName": "WindowsPC", "platformName": "Windows"}}
HTTP/1.1 500 Internal Error
Content-Length: 199
Content-Type: application/json
{"status":13,"value":{"error":"unknown error","message":"Failed to locate opened application window with appId: C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe, and processId: 27968"}}
(2)当加上参数 "ms:waitForAppLaunch":5, 的时候,报如下错误
①有时候报如下错误
{"capabilities": {"alwaysMatch": {"appium:app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "ms:waitForAppLaunch": 5}, "firstMatch": [{}]}, "desiredCapabilities": {"app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "ms:waitForAppLaunch": 5}}
HTTP/1.1 400 Bad Request
Content-Length: 131
Content-Type: application/json
{"status":23,"value":{"error":"no such window","message":"Cannot find active window specified by capabilities: appTopLevelWindow"}}
②有时候报的错误跟(1)一样
(3)新增"appArguments"参数报如下错误
{"capabilities": {"alwaysMatch": {"appium:app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "ms:waitForAppLaunch": 5, "appium:appArguments": "C:\\Users\\yeqinfang\\Desktop\\\u4e34\u65f6\u6587\u4ef6\\log.txt"}, "firstMatch": [{}]}, "desiredCapabilities": {"app": "C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe", "ms:waitForAppLaunch": 5, "appArguments": "C:\\Users\\yeqinfang\\Desktop\\\u4e34\u65f6\u6587\u4ef6\\log.txt"}}
HTTP/1.1 500 Internal Error
Content-Length: 199
Content-Type: application/json
{"status":13,"value":{"error":"unknown error","message":"Failed to locate opened application window with appId: C:\\Program Files (x86)\\IDMVS\\Applications\\Win64\\IDMVS.exe, and processId: 28380"}}
(4)增加官方指定的参数createSessionTimeout,也没啥用,报的错误跟(1)一样
3、有没有可能该应用是winappdriver不支持的应用?
①目前我们使用的驱动支持的应用
UWP - Universal Windows Platform
WinForms - Windows Forms
WPF - Windows Presentation Foundation
Win32 - Classic Windows
②查看该应用类型
没有相关方法,搞不定
4、手动打开和WinAppDriver打开的区别
手动打开
WinAppDriver打开
(1)这个发现说明什么呢?
说明程序没有被正确打开!那如何使用脚本正确打开呢?
①实验一:直接通过python工程(虚拟环境)的"os.system()"模块打开程序,竟然没有正确打开!
②实验二:使用系统python环境执行"os.system()"打开程序,依旧没有正确打开!
③实验三:通过cmd指令直接运行exe程序,正确打开!
(2)怀疑跟工作目录有关
添加“appWorkingDir”参数连接应用,发现也能正确打开了,但是依旧获取句柄失败!
三、多方面考虑,我决定弃掉该方案
1、原因一:上述情况表明,某些原因下,连接引用会异常
2、原因二:appium其实对winappdriver的支持不够好,2.0.0版本以后就不能使用了,要用1.3.0或以下版本才会有较好的支持
3、原因三:winappdriver提供的接口实际上并不算丰富,这可能也是被appium放弃的原因
4、原因四:python中有了更好的替代方案,那就是 pywinauto 模块!
Appium: Windows系统桌面应用自动化测试(二)相关推荐
- Appium: Windows系统桌面应用自动化测试(一)
一.方案调研 1.windows桌面应用自动化测试方案 (1)WinAppDriver是微软开发的自动化测试工具,而windows是微软开发的,兼容性应该极好. (2)WinAppDriver也可以是 ...
- java一键换壁纸_Java 版下载必应每日壁纸并自动设置 Windows 系统桌面(改编自 C# 版)...
哈哈,好久没有写博客了,已经荒废了,前几天在某 IT 网站看到一个用 C# 写的设置必应每日壁纸为 Windows 系统桌面,看了看源码是通过调用 User32.dll 进行设置的,刚刚最近做的项目更 ...
- windows系统桌面不显示计算机,如何处理电脑开机后不显示Windows系统桌面
最近有网友来请教小编,说他的电脑开机进入系统后,不显示桌面,那么如何处理电脑开机后不显示Windows系统桌面呢?下文学习啦小编分享了处理电脑开机后不显示Windows系统桌面的方法,希望对大家有所帮 ...
- 微信Windows系统桌面版聊天记录存放位置转移聊天记录
描述:微信Windows系统桌面版聊天记录存放位置转移聊天记录 步骤: 设置-文件管理-打开文件夹查看聊天记录文件-更改文件夹可移动聊天记录
- windows系统桌面显示计算机图标
前言 新重装系统桌面没有显示计算机图标,通过控制台快速调出计算机图标 过程 1.计算机桌面空白处,按住shift+右键,选择在此处打开命令行窗口或者是powershell 2.复制以下代码右键 ...
- 计算机盘不显示桌面,电脑开机后不显示Windows系统桌面怎么办?
今天小编的电脑"中枪"了,早上打开电脑,电脑启动速度比往常明显慢了一些,打开之后,等了一会电脑的任务栏,图标一直都不显示,也就是电脑开机后不显示桌面了,解决了问题之后,估计各位童鞋 ...
- 用python设置windows系统桌面背景(壁纸)的代码
下面的代码已经实现了把一张图片设置为壁纸的功能,我也加了比较详细的注释, 稍微改造一下就可以实现播放文件夹中所有图片, 下载设置必应图片等一些功能了 PIL官方下载地址(注:PIL貌似对python ...
- windows系统 桌面时钟控件
桌面时间控件horloger和win系统需要的补丁dotNetFx35. 下载链接: 设置:
- Windows 系统-桌面管理
第一章 CPU中央处理器,是整个计算机的运算与控制的核心 购买CPU考虑的参数 核心数 主频 缓存 U:低电压 H:集成在主板上 Q:四核处理器 M:移动设备 K:不锁倍频 X:极致性能 风冷散热 金 ...
最新文章
- 在CentOS 6.5 x86_64上安装libunwind的问题
- WPF中对三维模型的控制
- html a name属性
- 云上快速搭建Serverless AI实验室
- Tensorflow实现多层感知函数逼近
- eclipse启动springboot项目_多模块项目中的一个Spring Boot启动错误
- html云文件系统,一种HTML5云文件系统
- matlab 数值计算方法 pdf,《现代数值计算方法(MATLAB版)》习题解答.pdf
- mt6573 环境配置
- 关于人脸识别,Taylor Swift是认真的
- 多个CYUSB3014连接主机时添加序列号
- 图解---电脑连接wifi,显示无法连接到这个网络
- TOS和DSCP总结
- ARM neon详解
- Linux忘记密码的解决方法
- 计算机磁盘损坏问题与系统的重置和重装
- chatGPT与逆向的相遇,快速解决sslpinning抓包问题
- 把MM照片变手绘卡通效果
- /MTd /MD /MDd
- 计算机ct检查,影像学检查之三 CT(计算机体层)