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

news2024/11/16 9:52:02

Appium: Windows系统桌面应用自动化测试二

  • 一、关于自动化过程中,打开了应用,但获取不到操作句柄的问题
    • 1、问题描述
    • 2、问题分析
    • 3、问题解决
  • 二、尝试回归问题本身,去解决问题
    • 1、目标应用日志
    • 3、查看WinAppDriver日志
      • (1)当只给app参数的时候,报如下错误
      • (2)当加上参数 "ms:waitForAppLaunch":5, 的时候,报如下错误
      • (3)新增"appArguments"参数报如下错误
      • (4)增加官方指定的参数createSessionTimeout,也没啥用,报的错误跟(1)一样
    • 3、有没有可能该应用是winappdriver不支持的应用?
    • 4、手动打开和WinAppDriver打开的区别
      • (1)这个发现说明什么呢?
  • 三、多方面考虑,我决定弃掉该方案

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

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 模块!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLO系列正负样本分配策略

1、YOLOv3 使用MaxIoUAssigner策略来给gt分配样本,基本上保证每个gt都有唯一的anchor对应,匹配的原则是该anchor与gt的IOU最大且大于FG_THRESH,这种分配制度会导致正样本比较少,cls和bbox分支训练起来可能比较慢。在剩余的anchor…

(三)Flask前置知识栈——装饰器

在后续的讲解中,对大家对装饰器的掌握程度要求较高,所以此文来深入讲解一下,有看过《Python全栈系列教程》专栏的小伙伴可能会说,装饰器已经出过文章讲的很详细了。饶是如此,深究过装饰器的小伙伴们就权当复习一遍&…

荣耀笔记本怎么重装Win10系统?荣耀笔记本用U盘重装系统Win10教程

随着时间的推移,荣耀笔记本系统可能会变得缓慢、不稳定,甚至出现故障,这时候,重装操作系统就成为了一个必要的选择,那么怎么给荣耀笔记本电脑重装Win10系统呢,可以按照系统之家小编分享的荣耀笔记本用U盘重…

提升矿井水质安全性:矿井水除氟领域的应用与优势

引言 随着工业化进程的推进,矿井水中含有过量的氟离子已成为一个严重的环境问题。高浓度的氟离子对人体健康和生态环境都具有危害。因此,矿井水除氟工艺的研究和应用变得至关重要。 当废水中的氟超标超过了环保标准时,可能会对环境和人类健康…

【AUTOSAR】VCU开发实际项目讲解(一)----VCU系统边界条件

VCU系统边界条件 VCU基本性能参数 序号 项目 参考指标 试验方法或评定指标 1 外形尺寸 长244mm*宽156mm*41.4mm(参考尺寸) 2 工作电压 正常工作电压 9V-16V CAN通讯电压 8V-18V 不保证功能 <8V or >18V 3 过压保…

基于深度学习的高精度老虎检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度老虎检测识别系统可用于日常生活中或野外来检测与定位老虎目标,利用深度学习算法可实现图片、视频、摄像头等方式的老虎目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

host碰撞,利用host碰撞突破访问边界

文章目录 host 碰撞漏洞原理漏洞利用步骤漏洞复现 host 碰撞 直接利用ip访问显示的是403 404 400 500,但是用域名请求就会返回正常业务。当然在排除WAF作祟下(有一些WAF它会要求使用域名访问,使用IP的会出现WAF的拦截界面)&#…

记录node.js+vue-elementui-admin的后台管理系统登录传参问题

前言:本来想用Node做后端,vue-element-admin做前端来练习一下技术,了解一下开发的过程 // 用户登录处理函数 exports.login (req, res) > {console.log(req.body)const userinfo req.bodyconst sql select * from user where username…

迪赛智慧数——柱状图(象形动态图):高考填报专业考虑的因素

效果图 填报志愿是高考后的一大重要环节,你的职业生涯就在这里起航了。那么,应该怎么填报志愿呢?高考填报专业考虑的因素很多,过半的人会考虑专业就业前景及薪资,其次是个人兴趣和是否为双一流建设学科。 数据源&…

Spring中bean使用方法

Spring框架是一个非常重要的开发工具,它提供了丰富的功能和模块,其中核心的概念之一就是Spring Bean。Spring Bean是Spring IoC容器中的一个对象,它负责管理一个Java对象的生命周期以及依赖注入。下面我将通过互联网场景下的相关背景内容来阐…

[SSM]MyBatis基础

目录 一、MyBatis概述 1.1框架(framework) 1.2三层架构 1.3JDBC的不足 1.4了解MyBatis 二、MyBatis入门程序 2.1resources目录 2.2开发步骤 2.3从XML中构建SqlSessionFactory 2.4mybatis中有两个主要的配置文件 2.5关于第一个程序的细节 2.6关…

Linux read的核心函数generic_file_buffered_read

内核:5.9.0 流程图 generic_file_buffered_read一种调用路径(cat某个文件触发): #0 ondemand_readahead (mapping0xffff888005c61340, ra0xffff888005927598, filp0xffff888005927500, hit_readahead_markerfalse, index0, req…

Linux历史及环境搭建(VMware搭建CentOS7环境以及使用XShell连接Vmware)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机2.5 使用XShell连接VMware 结语 1.Linux历史 在这里简要介绍Linux的发展…

全局配置cnpm淘宝镜像

node是一个非常好用的项目管理工具 但这是一个国外的工具 我们直接执行npm命令因为是用的国外的镜像 会比较慢 那么 我们就可以用cnpm来处理 但前提是你要搭建好环境 我们先打开终端 安装 淘宝镜像 输入 npm install -g cnpm --registryhttps://registry.npm.taobao.org然后 n…

最强DETR+YOLO,三阶段目标检测器DEYOv2正式发布,性能炸裂!

导读 目标检测算法是CV领域非常重要的算法,去年二阶段DEYO的发布,提出了很多的创新点,而本文端到端的 论文链接:https://arxiv.org/pdf/2306.09165.pdf 本文提出了一种称为DEYOv2的新型目标检测器,这是第一版DEYO(DETR with YOLO)模型的改进版本。与前代类似,DEYOv2采…

企企通创始人CEO徐辉:数字生态与数字化供应链如何连通

6月16日,2023年华映资本年度大会在杭州成功举办。 2023年华映资本年度大会以“无限新成皆繁星”为主题。在为期一天的峰会中,华映资本合伙人团队、投资团队、华映资本被投企业创始人以及行业嘉宾等50位嘉宾汇聚一堂,既探讨行业当下科技强共识…

硬件可信方案-EVITA HSM

信息安全中的HSM 和 SHE 两个概念有什么区别和相同的地方? HSM,硬件安全模块,Hardware Security ModuleSHE,安全硬件扩展,Secure Hardware Extension EVITA研究项目的目标是为汽车车载网络设计、验证一个体系架构&am…

STM32单片机双通道FM调频数字音量收音机可存台音量可调TEA5767

实践制作DIY- GC0148---双通道FM调频数字音量收音机 基于STM32单片机设计---双通道FM调频数字音量收音机 二、功能介绍: STM32F103C系列最小系统板TEA5767 收音机模块LCD1602显示器喇叭功放模块数字电位器多个按键(存储、S1、S2、S3、频率-0.1MHz、频率…

【AUTOSAR】VCU开发实际项目讲解(二)----VCU软件与结构描述

VCU软件描述 VCU软件架构主要分为底层软件驱动和应用层控制策略,其中应用层控制策略通过基于模型的开发,自动生成代码并可与底层驱动软件实现无缝连接。 VCU软件通过BOOTLOADER和CAN总线进行更新刷写。 标定及诊断 支持CCP/XCP标定协议支持UDS诊断协议及…

聊一聊分布式会话的解决方案

1、传统Session 1、传统session的概述 1、认证过程 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。 3、服务器向用户返回一个 session_id&#xff…