百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

UI自动化 --- 微软UI Automation(ui自动化用什么工具)

ccwgpt 2024-10-10 04:42 32 浏览 0 评论

引言

自动化测试平台的意义就三个字 --- 稳定性。

无论是接口自动化测试,还是UI自动化测试,目的就是为了提高产品的稳定性,保证用户体验。

那常见的接口自动化测试比如有 PostmanSoapUIJMeter 等等。这一类网上的资料就太多太多了。本篇内容主要想讨论的是UI自动化测试,我搜集了一下常见的UI自动化测试平台:

  • 「Selenium」:Selenium是开源且免费的,使用非常广泛的Web应用程序自动化测试框架,它既支持多种语言的脚本驱动测试,也支持记录与回放的方式测试。
  • 「Appium」:Appium是一个开源免费的移动应用程序自动化测试框架,也支持多种语言的脚本驱动测试。
  • 「Katalon Studio」:Katalon Studio是一款免费的UI自动化测试工具,适用于Web、移动和API测试。它基于Selenium和Appium,并提供了图形化界面和内置的测试功能。
  • 「TestComplete」:TestComplete是一款功能强大的商业UI自动化测试工具,适用于Web、桌面和移动应用程序。它提供了多种脚本语言和图形化界面,以及灵活的对象识别和回放功能。
  • 「Ranorex」: Ranorex是一款商业UI自动化测试工具,适用于Web、桌面和移动应用程序。它提供了易于使用的录制和回放功能,支持多种编程语言。

从上面的数据中其实不难发现,对于桌面应用的UI自动化测试,上述框架或工具要么免费但是仅支持Web应用,要么就是商业化工具,一言难尽啊。

所以这就提到了我们的主题了 --- UIAutomation。

UIAutomation 介绍

来看一下微软官方对此的介绍 UIAutomation:

Microsoft UI Automation是适用于Microsoft Windows的辅助功能框架。它满足了辅助技术产品和自动化测试框架的需求,通过提供对用户界面(UI)信息的编程访问来实现。此外,UI Automation还使控件和应用程序开发人员能够使其产品具有辅助功能。

里边提到了,使用编程访问可以通过代码模仿由传统鼠标和键盘输入展开的任何交互和体验,UIAutomation 通过五个组件实现编程访问:

  • UI Automation tree(UI自动化树)
  • UI Automation elements(UI自动化元素)
  • UI Automation properties(UI自动化属性)
  • Control patterns(控件模式)
  • UI Automation events(UI自动化事件)

如下图所示:

最后列出了测试应用程序中实现UI自动化的步骤:

辅助工具介绍

步骤中提到了一个工具 --- 「Inspect.exe」 ,该工具是一个图形用户界面 (GUI) 应用程序,可用于收集用于提供程序和客户端开发和调试的 UI 自动化信息,它包含在 Windows SDK 中。

所以要使用「Inspect.exe」去查询控件的 AutomationIdProperty,必须安装Windows SDK。

然后可以直接使用Everything直接搜索 Inspect.exe ,可以看到 SDK 安装目录下,分别有x64,x86,arm64,arm四个,我们一般选择 x64 就可以。

然后使用该工具可以找到目标应用的控件,并根据AutomationProperties 进行编码模拟点击。

小试牛刀

接下来编写代码测试一下:

  1. 创建目标程序,一个WPF程序,放置一个TextBox输入框,命名为 textbox1,再放置一个按钮,命名为 button1,button1点击后弹窗提示“UIAutomation按钮测试”。
  2. 接下来创建测试程序,创建一个控制台程序,使用 UIAutomation API 执行在点击button1textbox1文本框输入"UIAutomation按钮测试"后缀时间。
  3. 使用「Inspect.exe」找到目标程序的的进程ID和控件的AutomationID。输入到测试程序中,看执行结果。

测试控制台程序代码如下:

using System;
using System.Diagnostics;
using System.Windows.Automation;

public class ProcessButtonClickAutomation
{
public static void Main()
{
Console.WriteLine("请输入目标进程ID:");
var targetProcessId = Console.ReadLine();
Console.WriteLine("请输入目标控件AutomationId:");
var automationId = Console.ReadLine();

// 根据进程ID查找进程
Process targetProcess = FindProcessById(int.Parse(targetProcessId));

if (targetProcess != )
{
// 查找进程的主窗口句柄
IntPtr mainWindowHandle = targetProcess.MainWindowHandle;

if (mainWindowHandle != IntPtr.Zero)
{
// 使用主窗口句柄获取AutomationElement
AutomationElement mainWindowElement = AutomationElement.FromHandle(mainWindowHandle);

// 查找按钮元素,根据需要修改按钮查找条件
PropertyCondition condition = new PropertyCondition(AutomationElement.AutomationIdProperty, automationId);
AutomationElement buttonElement = mainWindowElement.FindFirst(TreeScope.Descendants, condition);

if (buttonElement != )
{
// 获取按钮元素的InvokePattern
InvokePattern invokePattern = buttonElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;

if (invokePattern != )
{
// 模拟按钮点击操作
invokePattern.Invoke();
Console.WriteLine("按钮已被点击 " + DateTime.Now);
}
else
{
Console.WriteLine("按钮不可用");
}
}
else
{
Console.WriteLine("找不到按钮元素");
}
}
else
{
Console.WriteLine("找不到进程的主窗口");
}
}
else
{
Console.WriteLine("找不到指定的进程");
}
Console.WriteLine("执行完成~");

Console.ReadLine();
}

// 根据进程ID查找进程
public static Process FindProcessById(int processId)
{
try
{
Process process = Process.GetProcessById(processId);
return process;
}
catch (ArgumentException)
{
return ;
}
}
}

使用「Inspect.exe」可以看到目标WPF程序的 ProcessID = 24984 ,按钮控件的 AutomationId = button1

在控制台输入 ProcessIDAutomationId 可以看到结果测试程序执行结束后,目标WPF程序的文本框同时刷新。

写在结尾

UI Automation说是框架,我觉得更像是一组API,只是提供了你能够做自动化测试的基本能力,如果想要搭建一个桌面应用的UI自动化测试平台,那需要做的还有很多。比如你需要实现脚本支持,需要实现执行报告和日志,需要实现数据驱动测试,甚至需要支持持续集成和持续交付(CI/CD)流程中自动执行UI自动化测试。

现在我想搭建一个基于 UI Automation 的桌面应用的UI自动化测试平台,现在只是有一个大体思路:

  • UI Automation 提供桌面应用自动化测试的基本能力。
  • Roslyn 编译器平台提供脚本支持。
  • 执行报告和日志在封装UI Automation API的过程中,就可以添加进去了
  • 数据驱动测试就可以在脚本中完成。
  • 最后一点,持续集成和持续交付可以交给Jenkins

还是文章开头说到的,于桌面应用的UI自动化测试,现有框架或工具要么免费但是仅支持Web应用,要么就是商业化工具,所以想自己整一个,想法和方案都有了,至于可以做成什么样,那就拭目以待吧。

不了解 Roslyn 编译器平台的,可以看我之前的两篇文章

  • .Net 编译器平台 --- Roslyn(https://niuery.com/post/67)
  • .Net 编译器平台--- Roslyn Scripting APIs(https://niuery.com/post/68)
?

参考链接

Using UI Automation for Automated Testing:

https://learn.microsoft.com/en-us/dotnet/framework/ui-automation/using-ui-automation-for-automated-testing

?

相关推荐

滨州维修服务部“一区一策”强服务

今年以来,胜利油田地面工程维修中心滨州维修服务部探索实施“一区一策”服务模式,持续拓展新技术应用场景,以优质的服务、先进的技术,助力解决管理区各类维修难题。服务部坚持问题导向,常态化对服务范围内的13...

谷歌A2A协议和MCP协议有什么区别?A2A和MCP的差异是什么?

在人工智能的快速发展中,如何实现AI模型与外部系统的高效协作成为关键问题。谷歌主导的A2A协议(Agent-to-AgentProtocol)和Anthropic公司提出的MCP协议(ModelC...

谷歌大脑用架构搜索发现更好的特征金字塔结构,超越Mask-RCNN等

【新智元导读】谷歌大脑的研究人员发表最新成果,他们采用神经结构搜索发现了一种新的特征金字塔结构NAS-FPN,可实现比MaskR-CNN、FPN、SSD更快更好的目标检测。目前用于目标检测的最先...

一文彻底搞懂谷歌的Agent2Agent(A2A)协议

前段时间,相信大家都被谷歌发布的Agent2Agent开源协议刷屏了,简称A2A。谷歌官方也表示,A2A是在MCP之后的补充,也就是MCP可以强化大模型/Agent的能力,但每个大模型/Agent互为...

谷歌提出创新神经记忆架构,突破Transformer长上下文限制

让AI模型拥有人类的记忆能力一直是学界关注的重要课题。传统的深度学习模型虽然在许多任务上取得了显著成效,但在处理需要长期记忆的任务时往往力不从心。就像人类可以轻松记住数天前看过的文章重点,但目前的...

不懂设计?AI助力,人人都能成为UI设计师!

最近公司UI资源十分紧张,急需要通过AI来解决UI人员不足问题,我在网上发现了几款AI应用非常适合用来进行UI设计。以下是一些目前非常流行且功能强大的工具,它们能够提高UI设计效率,并帮助设计师创造出...

速来!手把手教你用AI完成UI界面设计

晨星技术说晨星技术小课堂第二季谭同学-联想晨星用户体验设计师-【晨星小课堂】讲师通过简单、清晰的语言描述就能够用几十秒自动生成一组可编辑的UI界面,AIGC对于UI设计师而言已经逐步发展成了帮助我们...

「分享」一端录制,多端使用的便捷 UI 自动化测试工具,开源

一、项目介绍Recorder是一款UI录制和回归测试工具,用于录制浏览器页面UI的操作。通过UIRecorder的录制功能,可以在自测的同时,完成测试过程的录制,生成JavaScr...

APP自动化测试系列之Appium介绍及运行原理

在面试APP自动化时,有的面试官可能会问Appium的运行原理,以下介绍Appium运行原理。Appium介绍Appium概念Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序...

【推荐】一个基于 SpringBoot 框架开发的 OA 办公自动化系统

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍oasys是一个基于springboot框架开发的OA办公自动化系统,旨在提高组织的日常运作和管理...

自动化实践之:从UI到接口,Playwright给你全包了!

作者:京东保险宋阳1背景在车险系统中,对接保司的数量众多。每当系统有新功能迭代后,基本上各个保司的报价流程都需要进行回归测试。由于保司数量多,回归测试的场景也会变得重复而繁琐,给测试团队带来了巨大的...

销帮帮CRM移动端UI自动化测试实践:Playwright的落地与应用

实施背景销帮帮自2015年成立以来,移动端UI自动化测试的落地举步维艰,移动端的UI自动化测试一直以来都未取得良好的落地。然而移动互联网时代,怎样落地移动端的UI自动化测试以快速稳定进行移动端的端到端...

编写自动化框架不知道该如何记录日志吗?3个方法打包呈现给你。

目录结构1.loguru介绍1.1什么是日志?程序运行过程中,难免会遇到各种报错。如果这种报错是在本地发现的,你还可以进行debug。但是如果程序已经上线了,你就不能使用debug方式了...

聊聊Python自动化脚本部署服务器全流程(详细)

来源:AirPython作者:星安果1.前言大家好,我是安果!日常编写的Python自动化程序,如果在本地运行稳定后,就可以考虑将它部署到服务器,结合定时任务完全解放双手但是,由于自动化程序与平...

「干货分享」推荐5个可以让你事半功倍的Python自动化脚本

作者:俊欣来源:关于数据分析与可视化相信大家都听说自动化流水线、自动化办公等专业术语,在尽量少的人工干预的情况下,机器就可以根据固定的程序指令来完成任务,大大提高了工作效率。今天小编来为大家介绍几个P...

取消回复欢迎 发表评论: