WinApp自动化测试之WinAppDriver工具简介

news2024/9/21 22:35:50

前篇文章中,我们讲到了WinApp自动化测试工具的选择,今天我们来简单介绍WinAppDriver工具。

Windows Application Driver (WinAppDriver)是Windows系统上的一个应用程序驱动工具,使用该驱动程序,测试人员能够通过Appium-Python-Client依赖库完成对Windows桌面程序的自动化操作。

对于熟悉Appium的人员来说,可以轻松上手且完成WinApp自动化测试脚本的编写。本节就来介绍WinAppDriver工具。

简介

WinAppDriver是Windows系统上的一个应用程序驱动工具,开源免费。与Selenium工具类似,都是用来实现产品UI自动化测试的一个工具。

WinAppDriver运行时对系统是有要求的,只能运行在Windows10或Windows Server 2016以上系统。如果测试程序兼容性,WinAppDriver很显然不能满足Windows10或Windows Server 2016以下系统的测试。因此使用WinAppDriver实现的自动化测试脚本是有局限性的。

WinAppDriver支持测试UWP、WinForms、WPF、Win32应用程序。

  • UWP:Universal Windows Platform,即Windows通用应用平台,在Windows 10 Mobile/Surface(Windows平板电脑)/PC/Xbox/HoloLens等平台上运行。它并不是为某一个终端而设计,而是可以在所有Windows10设备上运行。

  • WinForms:Windows Forms,是微软的.NET开发框架的图形用户界面部分,该组件通过将现有的Windows API(Win32 API)封装为托管代码提供了对Windows本地(native)组件的访问方式。

  • WPF:Windows Presentation Foundation,是微软推出的基Windows的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。

  • Win32:Classic Windows,是标准windows程序,完全拥有window的特性,可以通过鼠标点击窗口来完成控制。

WinAppDriver支持Appium,测试人员可以借助Appium的客户端Appium-Python-Client来编写自动化测试脚本,无论从语法还是脚本编写的思路构建上,都是相同的,减少了学习成本。

综上所述,WinAppDriver有以下优点:

  • 它是一个开源工具,它使用Web驱动协议。

  • 它是免费的,由微软开发。

  • WinAppDriver可以与Selenium和Appium项目集成在同一种语言中。

  • 可以在WinAppDriver中使用任何编程语言。

  • 可以使用Xpath和其他属性来定位UI元素。

启动和运行

初次使用WinAppDriver,借助Appium客户端编写自动化测试脚本需要经过安装WinAppDriver>>开启开发人员模式>>安装Appium客户端>>运行WinAppDriver.exe程序>>编写测试脚本,五个步骤。

步骤一:安装WinAppDriver

进入WinAppDriver下载页面(https://github.com/Microsoft/WinAppDriver/releases),下载WinAppDriver安装程序。例如下载WinAppDriver v1.2.1,在v1.2.1版本下找到MSI安装应用程序,进行下载,如图7-1。

下载完成后会得到一个WindowsApplicationDriver_1.2.1.msi程序,点击完成安装。进入安装路径(如果安装时选择的是默认路径则为C:\Program Files (x86)\Windows Application Driver),在此路径下会有一个WinAppDriver.exe程序文件,这便是WinAppDriver的启动文件。

步骤二:开启开发人员模式

WinAppDriver的运行需要开启开发人员模式,否则无法运行。依次进入计算机的设置>>更新和安全>>开发者选项,将【开发人员模式】打开,如图7-2。

 

步骤三:安装Appium客户端

步骤四:运行WinAppDriver.exe程序

进入WinAppDriver的安装路径,以管理身份运行WinAppDriver.exe程序。启动成功后会弹出一个命令行窗口,提示“Windows Application Driver listening for requests at: http://127.0.0.1:4723/”,如图7-3。

 

WinAppDriver启动后默认会IP地址和端口号为127.0.0.1:4723上的请求,在使用时我们可以配置监听的IP地址和端口号,示例如下:

WinAppDriver.exe 4727WinAppDriver.exe 10.0.0.10 4725WinAppDriver.exe 10.0.0.10 4723/wd/hub

入WinAppDriver.exe所在路径下,执行命令WinAppDriver.exe 4727即可完成,如图7-4所示。

 

 

步骤五:编写测试脚本

例如编写一个简单的脚本,启动写字板应用,然后点击最大化按钮,接着点击关闭按钮关闭写字板应用。代码如下:


# winApp_demo.py
import time

from appium import webdriver
from selenium.webdriver.common.by import By

# 添加启动参数
desired_caps = {}
desired_caps['app'] = r"C:\Program Files\Windows NT\Accessories\wordpad.exe"
# 客户端连接 Server,启动 Session 会话
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723', desired_capabilities=desired_caps)
time.sleep(3)

# 定位 最大化 按钮,并点击
driver.find_element(by=By.NAME, value="最大化").click()
time.sleep(1)
# 定位 关闭 按钮,并点击
driver.find_element(by=By.NAME, value="关闭").click()
# 关闭会话
driver.quit()

运行脚本后,会观察到计算机上启动了写字板应用,然后最大化,接着就被关闭。

  • 上面代码中在启动参数中添加了app参数,指明要启动程序;

  • 定位元素使用的是Selenium提供的定位方式,通过元素的NAME属性进行定位,然后对元素点击操作;

  • 最后使用quit()方法结束会话。

整体语法与之前讲解的Web测试自动化和APP测试自动化是相同的,因此很容易掌握。

注意:使用WinAppDriver进行自动化测试时,由于与Appium、Selenium之间的兼容性处理不是很好,因此会许多意想不到的问题。

例如使用高版本的Selenium和Python时,在点击元素时可能会出现“'dict' object has no attribute 'click'”异常,此时就需要将Selenium 版本由4降到3,又或者将Python版本降级到3.6解决。

因为正常定位到的元素是WebElement对象,而非字典。但相信随着这三个工具不断地更新迭代,这些问题都会得到解决。在此笔者WinAppDriver使用的版本是1.2,Appium-Python-Client版本是2.0.0a0,Selenium版本是4.0.0a1。

元素识别工具

WinApp元素识别工具有很多,例如WinSpy、AccEvent、Inspect。最早的时候使用Inspect工具识别WinApp上的标题栏、菜单栏、工具栏、树视图及数据视图,但是随着技术的发展和人们的需求变化,微软推出了Accessibility Insights工具代替Inspect,在Inspect官网文档中也建议用户使用Accessibility Insights工具。

WinApp控件识别就可借助Accessibility Insights For Windows工具,该工具是微软官网推荐的一个辅助工具,可帮助测试人员轻松获取WinApp元素属性,比Inspect工具功能更丰富、界面更清爽、操作更方便。

进入Accessibility Insights工具下载页面(https://accessibilityinsights.io/downloads/),选择检查Windows应用程序,然后下载。下载完成后双击运行,根据提示操作即可完成安装。启动Accessibility Insights For Windows程序,界面如图7-5所示。

Accessibility Insights For Windows工具主要有三个功能,分别是Live Inspect、FastPass和Troubleshooting。

  • Live Inspect允许开发人员将鼠标悬停在元素上方或设置键盘焦点来验证应用程序中的元素属性是否正确;

  • FastPass通过简单的两步操作就可以帮助开发人员在5分钟之内识别常见的、影响较大的可访问性问题;

  • Troubleshooting允许用户诊断和修复特定的可访问性问题。

WinApp自动化测试中需要借助Accessibility Insights For Windows工具的Live Inspect功能,获取元素属性,对元素进行定位或状态判断。下面具体介绍Live Inspect功能的使用。

步骤一

打开Accessibility Insights For Windows工具。

步骤二

进入Inspect界面,点击左侧导航栏的【Inspect】图标进入Live Inspect模式,【Inspect】图标见图7-6标记处。

 

步骤三

选择检查对象为元素【Element】,在Inspect界面的菜单栏中,将【What to select:】值选择成Element,如图7-7所示。

 

Inspect界面的菜单栏中一共有5个菜单。从左至右依次是检查对象、高亮显示、元素实时追踪、加载测试或事件文件。

  • 检查对象(What to select)

是一个下拉选择框,选项有Element和Entire app两项。一般情况下,我们选择Element就可以了,在UIA树(UI Automation Tree,简写为UIA Tree)中可以清楚看到每个元素所在的位置。

  • 高亮显示

默认会开启高亮显示,在选择元素或组件时,会在应用程序中高亮显示选择的区域。关闭后选择区域就不会高亮显示。

  • 元素实时追踪

默认是开启状态,会跟随监听的应用程序页面变化而动态显示元素。关闭后不会动态显示应用程序的最新元素。

  • 定时器

内置的一个定时器,用以设置自动检查的延迟时间,自动检查中使用,我们暂时使用不到。

  • 加载测试或事件文件

用来加载事先保存的测试文件或事件监控文件,我们暂时使用不到。

步骤四

选择应用程序中的元素查看其属性。例如查看写字板中的字体加粗按钮,首先鼠标悬浮在写字板字体区域,然后鼠标移动到Accessibility Insights For Windows工具中UIA树下【按钮 ‘加粗’】节点,接着左键单击,即可在右侧的【DETAILS】详情区域下看到元素的属性,如图7-8所示。

 

从详情区域显示的内容可以知道,字体加粗按钮的Name属性值为“加粗”,ControlType属性值为“Button[50000]”,LocaizedControlType属性值为“按钮”,IsKeyboardFocusable属性值为“True”,BoundingRectangle属性值为“[l=365,t=232,r=388,b=254]”。

注意:从UIA树中可以看到,第一个节点是窗格 ‘桌面 1’,即桌面窗口,也称为Root窗口。Root窗口下面节点才是应用程序窗口。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

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

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

相关文章

el_table切换行前校验,决定是否可切换

思路:拿到当前点击行并存储比如叫做oldRow,把即将切换行的row与oldRow做对比,校验是否可切换,若校验不可切换,则通过遍历仍选中仍选中oldRow.

python简单实现人脸检测/跟随

import cv2# 加载人脸识别器的模型 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)# 打开摄像头 cap cv2.VideoCapture(0)# 初始化人脸框位置 prev_faces []# 定义绘制带圆角矩形边框的函数 def draw_rounded_rectangle(…

C语言学习(三十一)---结构体、联合体的在内存中的存储

在上一篇文章中,我们学习了枚举、位段和联合体的相关内容,在文章的末尾,我们还差了关于联合体的存储问题的内容,今天我们将学习该部分的内容,好了,话不多说,开整!!&#…

TiDB(2):TiDB架构特性

1 TiDB 整体架构 TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件和简化云上部署管理的 TiDB Operator 组件。 架构图解 1.1 TiDB Server TiDB Server 负责接收…

20个主流的代码生成LLM大模型及9种常见应用场景

基于生成式AI的代码生成(Code Generation)是一个重要的新领域,用于根据不完整的数据源、用另一种编程语言编写的程序、自然语言描述或执行日志来预测代码或程序结构。 多年来,开发人员经常从博客、帖子、文章和其他网站获取代码&…

vue引用百度地图,drawingManager.setDrawingMode不能接受参数,否则会报错

直接上部分代码: 引用百度地图后,没报错,但是鼠标绘制线路时报错: // 绘制点线 this.drawingManager new window.BMapLib.DrawingManager(this.map, { isOpen: true, //是否开启绘制模式 //enableDrawingTool: true, //是否显示…

数据结构 | 线索二叉树

一、数据结构定义 /* 线索二叉树 */ typedef char ThreadType; typedef struct ThreadNode {ThreadType data;struct ThreadNode* lchild, * rchild;int ltag, rtag; //左右线索标志 }ThreadNode, *ThreadTree; 二、方法概览 ThreadTree createTree(); //先序方法创建二叉树…

==和equals的区别

“”和equals 最大的区别是 “”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。equals是Object的方法,比较的是所指向的对象的地址值,一般情况下&#xff0c…

Jvisualvm内存模型剖析-JVM(五)

上篇文章代码讲解了tomcat加载以及gc回收流程。 Jvm内存模型剖析优化-JVM(四) Jvisualvm 我们可以编写如上代码,之后打开jvm自带的工具jvisualvm。 如果我们看visual不会明显变化,则可以修改睡眠参数,时间改小。 当…

【MySQL】根据MVCC和Read View分析事务的四种隔离级别在读写场景分别是如何体现其隔离性的

目录 一、数据库并发的三种场景 二、读写场景的MVCC 1、3个(4个)记录隐藏列字段 2、undo log(撤销日志) 3、模拟MVCC场景 3.1update场景 3.2delete场景 3.3insert 3.4select场景 4、Read View 5、RR和RC的区别 5.1当…

Squid 代理服务器应用

目录 一、Squid 概念1.1 代理的工作机制1.2 代理服务器的作用1.3 Squid 代理的类型 二、安装 Squid 服务2.1 编译安装 Squid2.2 修改 Squid 的配置文件2.3 Squid 的运行控制2.4 创建 Squid 服务脚本 三、构建传统代理服务器四、构建透明代理 服务器五、ACL 访问控制六、 日志分…

Python——模块与包

一、模块 (1)模块的定义 模块——Modules,通常一个py文件就是一个模块,我们在一个py文件里面会定义多个函数,也就是说一个模块中可以包含N多个函数。 (2)模块化编程的好处 ①方便其他程序和脚本的导入并使用…

从0到1精通自动化测试,pytest自动化测试框架,allure描述用例详细讲解(二十二)

一、前言 pytestallure是最完美的结合了,关于allure的使用,本篇做一个总结。 allure报告可以很多详细的信息描述测试用例,包括epic、feature、story、title、issue、testcase、severity等 环境准备: 1.python 3.6 2.pytest 4.5.…

使用Jetpack Compose创建滑动刷新(SwipeRefreshLayout)

Compose并未像View-based系统那样内建SwipeRefreshLayout。但Compose鼓励你自行创建需要的可组合函数,它提供了足够的工具供你完成此任务。 在本篇博客中,我们将展示如何在Jetpack Compose中创建滑动刷新界面的过程。但请注意,以下代码相当简…

flutter:实现一个简单的appBar上的搜索框、一个简单的搜索历史

搜索框 效果图 代码 import package:flutter/material.dart;class NovelSearch extends StatefulWidget {overrideState<StatefulWidget> createState() > _NovelSearchState(); }class _NovelSearchState extends State<NovelSearch> {String searchVal ;o…

DSP的CLA编程及注意事项之一

CLA简介 CLA(Control Law Accelerator),即控制律加速器&#xff0c;该 CLA 是完全可编程的独立 32 位浮点 CPU&#xff0c;专为优化数学密集型计算而设计&#xff0c;可显著提升控制算法的性能。与 执行指令和处理中断的标准传统处理器不同&#xff0c;CLA 实际上是任务驱动状…

Axure教程—上传文件

本文介绍用Axure制作文件上传效果 预览 预览地址&#xff1a;https://6q4of2.axshare.com 功能 1、点击”文件上传“按钮&#xff0c;显示上传的文件 2、点击”删除“图片&#xff0c;显示提示”是否要删除“&#xff0c;点击”是“&#xff0c;删除数据&#xff0c;点击”否…

开放式蓝牙耳机好不好,列举出几款值得入手的开放式蓝牙耳机

开放式耳机不仅能够提升幸福感还能听到周围环境声&#xff0c;大大提高安全性&#xff0c;不入耳不伤耳设计&#xff0c;既稳固又舒适&#xff0c;佩戴上耳无压力&#xff0c;还具有良好的音质和舒适的佩戴体验。但市面开放式耳机质量也参差不齐&#xff0c;有些使用感不佳&…

高压放大器使用说明书

高压放大器是一种电子设备&#xff0c;可以将输入信号的电能转换成输出信号的电能&#xff0c;从而实现信号放大的功能。它广泛应用于各种领域&#xff0c;例如通信、雷达、医疗等等。下面是一份高压放大器使用说明书&#xff0c;帮助用户更好地了解和使用该设备。 一、高压放大…

追思郭文彬:不管封我当什么长,下辈子我还当厨师!

6月28日&#xff0c;在北京联合大学旅游学院餐饮管理系的走廊&#xff0c;大大的长条桌上摆放着各类像生面点、面塑、包子等美食作品——牡丹、玉兰花、灯笼、小金鱼、花生、龙眼、山竹、翡翠白菜……作品精巧细致&#xff0c;形神兼备&#xff0c;宛若工艺品。 这些作品都出自…