Appium: Windows系统桌面应用自动化测试(END)

一、关于自动化过程中,打开了应用,但获取不到操作句柄的问题

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作为客户端通过改变配置参数进行解决,再次失败

配置参数文档见如下链接:
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 模块!

pywinauto 和 WinAppDriver 都能很好的完成 PC 端的自动化,但是由于 WinAppDriver 支持 Appium,在脚本语法简洁性方面可能更有优,能满足大部分的pc端自动化需求,如有部分pc端自动化无法满足可考虑后续再引入pywinauto 模块

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows系统桌面应用自动化测试是指通过使用自动化测试工具或框架来模拟用户操作和验证应用程序的功能和性能。下面是一些常见的Windows系统桌面应用自动化测试的介绍: 1. 自动化测试工具:常见的自动化测试工具包括Selenium、Appium、WinAppDriver等。这些工具可以模拟用户的操作,如点击、输入、选择等,并可以验证应用程序的功能是否正常。 2. UI自动化测试:UI自动化测试是指通过模拟用户界面操作来验证应用程序的功能。它可以模拟用户在应用程序中的各种操作,如点击按钮、输入文本、选择下拉框等,并可以验证应用程序的响应是否符合预期。 3. 数据驱动测试:数据驱动测试是一种测试方法,它通过使用不同的测试数据来执行相同的测试用例。在Windows系统桌面应用自动化测试中,可以使用数据驱动测试来验证应用程序在不同输入数据下的行为和结果。 4. 性能测试:性能测试是指对应用程序进行压力和负载测试,以评估其在不同负载下的性能表现。在Windows系统桌面应用自动化测试中,可以使用性能测试工具来模拟多个用户同时操作应用程序,并监测其响应时间、资源占用等指标。 5. 集成测试:集成测试是指对应用程序的各个模块进行整体测试,以验证它们之间的交互和协作是否正常。在Windows系统桌面应用自动化测试中,可以使用集成测试工具来模拟不同模块之间的交互,并验证其功能和数据的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值