前篇文章中,我们讲到了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 4727
WinAppDriver.exe 10.0.0.10 4725
WinAppDriver.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窗口下面节点才是应用程序窗口。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取