对Windows桌面应用程序进行UI自动化测试

所谓UI自动化测试,就是模拟一个用户,对应用程序的UI进行操作,以完成特定场景的功能性集成测试。

要对Windows桌面应用程序进行UI自动化测试,目前可选的技术主要是两种:VS自带的CodedUI Test和Appium+WinAppDriver。但是,微软已经宣布VS2019将是带有CodedUI Test的最后一个版本,且在面对某些复杂场景的时候有点力不从心。而Appium作为移动应用主流的UI测试工具,已经被业界广泛采用,且相关的接口是标准化的,因此微软对其进行了扩展(即WinAppDriver),让Appium可以支持包括Universal Windows Platform (UWP), Windows Forms (WinForms), Windows Presentation Foundation (WPF), and Classic Windows (Win32)之内的Windows桌面应用。所以采用Appium来作为Windows桌面应用程序UI自动化测试的工具是最佳选择。

要完成UI自动化测试的大致步骤如下(你首先需要一台Windows 10的PC):

1,准备好待测试的Windows桌面应用程序。

2,到 https://github.com/Microsoft/WinAppDriver/releases 下载WinAppDriver的安装包,进行安装。并启用Windows 10的开发者模式。从安装目录(比如:C:\Program Files (x86)\Windows Application Driver)来启动WinAppDriver。

3,用你喜欢的测试框架创建UnitTest项目,在项目中引用Appium.WebDriver这个Nuget包。

4,编写测试用例,执行测试。

整个用例的编写也相对简单:

1,使用DesiredCapabilities来设定要测试的目标应用。

2,使用WindowsDriver<WindowsElement>来声明测试的会话。

3,通过测试会话查找对应的UI元素,对UI元素进行SendKeys(模拟填写内容)和Click(模拟点击)等操作,或者获取UI元素的相关Property和Attribute来进行验证。

4,编写测试最挑战的地方就是在于如何查找到UI元素,我们可以借用Windows SDK里面的inspect.exe这个工具来辅助我们查找。工具的位置在C:\Program Files (x86)\Windows Kits\10\bin里面的特定版文件夹中。用法是先启动应用程序并导航到待测试的界面,启动这个工具就会获得桌面上所有窗口的UI元素层级关系,并通过焦点等方式导航到要查找的UI元素上。查看相应的信息,并采用适合的查找方式。具体的查找方式可见:https://github.com/Microsoft/WinAppDriver#supported-locators-to-find-ui-elements。选择适合的查找方式有时候需要多尝试几种,有些UI元素只能用特定的方式来查找,比如html的input button只用FindElementByName ,而html的button就可以用FindElementByAccessibilityId 。

测试用例的编写可以参考WinAppDriver源代码自带的Sample,也可以参照我的示例:https://github.com/heavenwing/WindowsAppUITestSample。

在我的这个示例当中,目标应用采用的是Hybrid方式运行(即通过WebBrowser来嵌入html,并用C#进行行为操作),考虑到这种应用程序可能是多个函数库组装在一起,所以测试项目理应也是多个项目组合的(即功能函数库对应一个测试项目),并且其他测试项目可以复用公共的测试步骤(比如:列表页面复用登录的测试步骤)。

640?wx_fmt=jpeg

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

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

相关文章

项目实战中如何使用抽象类和接口

引子&#xff1a;时常会有这么一个疑惑&#xff0c;抽象类和接口功能好像&#xff0c;真正用起来该如何抉择呢&#xff1f;&#xff1f;好问题。。来看看书上怎么说的&#xff08;C#7.0本质论&#xff09;虽然方法可在基类中声明为抽象成员&#xff0c;但是&#xff01;&#x…

番茄日志发布1.0.3版本-增加Kafka支持

番茄日志&#xff08;TomatoLog&#xff09;能做什么可能你是第一次听说TomatoLog&#xff0c;没关系&#xff0c;我可以从头告诉你&#xff0c;通过了解番茄日志&#xff0c;希望能帮助有需要的朋友&#xff0c;番茄日志处理将大大降低你采集、分析、处理日志的过程。介绍Toma…

ArangoDB 3.5发布:流事务API、蒙面数据、搜索性能大幅提升、最短路径功能

ArangoDB 3.5 发布了。ArangoDB 是一个分布式原生的多模型数据库&#xff0c;具有灵活的文档、图形和键值数据模型。使用方便的 SQL 查询语言或 JavaScript 扩展构建高性能应用程序。此版本亮点包括&#xff1a;期待已久的 Streaming Transactions API&#xff0c;可以直接使用…

ASP.NET Core on K8S深入学习(7)Dashboard知多少

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。在第二篇《部署过程解析与Dashboard》中介绍了如何部署Dashboard&#xff0c;但是没有更多地介绍如何使用Dashboard&#xff0c;本文就来对Dashboard的使用进行补充。…

【学习笔记】Docker - 02. 在容器中运行软件(上)

2.1 控制容器: 构建一个网站监视器 需求: 客户想让你做一个网站, 这个网站需要被紧密的监视, 如果服务器宕机了, 那么它们的团队会收到相关的邮件. 这里用到了3个容器. 第一个运行NGINX; 第二个运行一个叫做mailer的程序. 这两个容器都是detached的. Detached 表示容器将在后台…

lintcode 有效的括号序列

心血来潮&#xff0c;半夜做了一道Lintcode的题目&#xff0c;调试完睡觉&#xff0c;欢迎大家批评指正。 public boolean isValidParentheses(String s) {// Write your code hereStack stacknew Stack();if(s.length()0){return true;}else if(s.length()1){return false;}fo…

2019 年 8 月编程语言排行榜,C#重回增长之路

至于火热的 Python&#xff0c;其占有率还是保持着一如既往的增长势头&#xff0c;由 7 月的 9.260% 上升到现在的 10.020%。C 的占有率则稍有下降&#xff0c;由 6.705% 下降到了 6.057%&#xff0c;C# 和 Visual Basic .NET 分别呈现出增长和下降的趋势。可能是本期榜单没什么…

asp.net core系列 71 Web架构分层指南

一.概述本章Web架构分层指南&#xff0c;参考了“Microsoft应用程序体系结构指南”&#xff08;该书是在2009年出版的&#xff0c;当时出版是为了帮助开发人员和架构师更快速&#xff0c;更低风险地使用Microsoft平台和.NET Framework设计和构建有效&#xff0c;高质量的应用程…

C#高级语法之泛型、泛型约束,类型安全、逆变和协变(思想原理)

一、为什么使用泛型&#xff1f;泛型其实就是一个不确定的类型&#xff0c;可以用在类和方法上&#xff0c;泛型在声明期间没有明确的定义类型&#xff0c;编译完成之后会生成一个占位符&#xff0c;只有在调用者调用时&#xff0c;传入指定的类型&#xff0c;才会用确切的类型…

谈自由,ASP.NET Core才是未来?

首先我要说一下自己对自由的理解&#xff1a;自由是我可以选择不干什么&#xff0c;但我要保留我可以干什么的可能性。比如说我现在只有一个码农的角色&#xff0c;但我仍然要保留可以扮演其他角色的可能&#xff0c;比如成为一个作者&#xff0c;当我写下文章的时候已经是了&a…

今天,全网曝光这几个公众号

有人统计过&#xff0c;我们平均每天花在看内容上的时间是5-6小时与其每天被各种看过就忘的内容占据时间不如看点真正对你有价值的信息下面小编为你推荐几个高价值的公众号&#xff0c;这些公众号都是专注.NET技术它们提供的信息能真正提高你生活的质量当你迷茫的时候刷刷这些大…

.NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功

最近几个月本人与团队一直与小程序打交道&#xff0c;对小程序的实战开发算比较熟悉&#xff0c;也因一些朋友经常问我各种小程序问题&#xff0c;无不能一一回答&#xff0c;想了很久&#xff0c;决定还是空余时间来写写文章吧&#xff0c;偶尔发现一个人安静的时候写文章特爽…

学习笔记之12个月提升计划

Java世界博大精深&#xff0c;有太多的东西要学。如果一头扎进去&#xff0c;很可能会淹没在Java技术的海洋里。于是&#xff0c;最近一直在思考列一个提纲&#xff0c;作为高级工程师到资深、再到架构之路的路标。 学习笔记一栏&#xff0c;即为本计划的博客记录。将自己的计划…

从“梁漱溟:思考问题有八层境界”所联想到的

最近一段时间以来写的文章比较少了&#xff0c;这固然是有一些客观原因&#xff0c;但确实有我不可说的一些自我反省和认识等主观因素。记得8月初有一次友人聚餐&#xff0c;席间有朋友聊到公众号的运营心得体会&#xff0c;其中有一条是&#xff1a;避免粉丝减少的黄金法则之一…

程序员过关斩将--cookie和session的关系其实很简单

喜欢就点关注吧!月高风下&#xff0c;下班路上....菜菜哥&#xff0c;告诉你一个秘密&#xff0c;但是不允许告诉任何人这么秘密&#xff0c;你有男票了&#xff1f;~不是&#xff0c;昨天我偷偷去面试了&#xff0c;结果挂了这不是好事吗&#xff0c;上天让公司留住你.....好吧…

.NET导出Excel的四种方法及评测

前言导出Excel是.NET的常见需求&#xff0c;开源社区、市场上&#xff0c;都提供了不少各式各样的Excel操作相关包。本文&#xff0c;我将使用NPOI、EPPlus、OpenXML、Aspose.Cells四个市面上常见的库&#xff0c;各完成一个导出Excel示例。然后对其代码风格和性能做一个横向比…

[2021.1.27多校省选模拟10]染色(min-max容斥/二项式反演)

[2021.1.27多校省选模拟10]染色 突然发现我对概率期望的理解不是很好。。。 部分分1&#xff1a;可以直接进行状压dp&#xff0c;然后按照题意模拟即可。 部分分2&#xff1a;首先可以发现这个问题是min_max容斥形式&#xff0c;然后对于min(T)的问题&#xff0c;我们将问题转…

[2021.1.27多校省选模拟10]跑步(线段树合并)

[2021.1.27多校省选模拟10]跑步 经典的树上启发式合并题目&#xff0c;维护对应子树的从当前点到子树内一个节点这个链待定&#xff0c;其他部分已经确定的方案数&#xff0c;这个东西按照对应点到根节点的路径点权和为下标存在一个权值线段树中&#xff0c;然后维护这个权值线…

ASP.NET Core 双因素验证2FA 实战经验分享

必读本文源码核心逻辑使用AspNetCore.Totp&#xff0c;为什么不使用AspNetCore.Totp而是使用源码封装后面将会说明。为了防止不提供原网址的转载&#xff0c;特在这里加上原文链接&#xff1a;双因素认证双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起…