问题产生原因:1.期望能力选项参数丢失
例如:capabilities.setCapability("appWorkingDir", "C:\\Program Files (x86)\\Tencent\\app"))
某些app需要设置目录属性才可以启动。
问题产生原因:2.访问权限不足
例如:开发工具 或者 WinAppDriver 没有权限访问目标app内存。
需要以管理员命令运行。
问题产生原因:3.App启动延迟
例如:App启动,界面为加载成功,代码逻辑已经运行,此刻查找窗口的方法查找不到窗口id。
加入延迟启动属性:capabilities.setCapability("ms:waitForAppLaunch", "5");等待5秒
问题产生原因:4.App进程保护
例如:目标App结果特殊处理,隐藏了窗口指针,以防止恶意程序读取登录等消息。
早期的盗QQ号程序就是通过检测登录窗口来实现HOOK钩子操作,达到盗号目的。
解决方式需要分析内存以获取窗口指针。
其他解释:
这个错误消息表明,您尝试访问的应用程序没有打开,或者您尝试访问的应用程序没有正确注册 appid。
您需要检查您的代码是否正确打开了应用程序,并且应用程序是否正确注册了 appid。
如果应用程序已经打开,则可能是您尝试访问的应用程序的 appid 与实际注册的 appid 不匹配,因此无法找到该应用程序的窗口。
如果应用程序没有打开,则可能是您的代码没有正确调用应用程序的打开方法,或者可能是应用程序存在某些问题,导致无法正常启动。
请检查您的代码,并根据上述情况进行调试。
排除以上3种简单可能、第四种主动内存查找方式访问app (前提:该app没有刻意做安全加固、仅仅隐藏或动态设置了窗口指针)
传送门拿来主义:

本文分析了AppiumWinAppDriver在自动化测试中遇到'Failed to locate opened application window with appid'错误的四个主要原因:期望能力选项参数丢失、访问权限不足、App启动延迟和App进程保护。提供了相应的解决方案,包括设置appWorkingDir、以管理员权限运行、增加等待时间以及分析内存获取窗口指针。并提到了利用JNA获取窗口句柄以解决问题。
最低0.47元/天 解锁文章
867

被折叠的 条评论
为什么被折叠?



