UI自动化 --- UI Automation 基础详解

这篇具有很好参考价值的文章主要介绍了UI自动化 --- UI Automation 基础详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

上一篇文章UI自动化 --- 微软UI Automation中,介绍了UI Automation能够做什么,且借助 Inspect.exe 工具完成了一个模拟点击操作的Demo,文章结尾也提出了自己的一些想法,想要借助UI Automation做一个UI自动化测试平台。想法毕竟是想法,还是得落地实践,一步一步来。

本篇文章内容详细学习UI Automation 的基础知识。

UI Automation 基础

上一篇文章中提到 UIAutomation 通过五个组件实现编程访问:

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

接下来一一学习,以下内容翻译自微软官方文档(https://learn.microsoft.com/en-us/dotnet/framework/ui-automation/ui-automation-fundamentals)。

UI Automation tree(UI自动化树)

UI自动化树可以通过过滤来创建仅包含特定客户端相关的 AutomationElement 对象的视图。这种方法允许客户端根据其特定需求自定义通过UI自动化呈现的结构。

客户端有两种方式来自定义视图:通过作用域和过滤。作用域是定义视图的范围,从一个基本元素开始:例如,应用程序可能只想查找桌面的直接子元素,或者某个应用程序窗口的所有后代元素。过滤是定义要包含在视图中的元素类型。

UI自动化提供程序通过在元素上定义属性来支持过滤,包括 IsControlElementProperty 和 IsContentElementProperty 属性。

UI自动化提供了三个默认视图:原始视图控件视图内容视图

这些视图是根据执行的过滤类型定义的;任何视图的作用域由应用程序定义。此外,应用程序还可以对属性应用其他过滤器;例如,只在控件视图中包含已启用的控件。

原始视图(Raw View)

UI自动化树的原始视图是以桌面为Root的 AutomationElement 对象的完整树。原始视图紧密遵循应用程序的本机编程结构,因此是最详细的可用视图。它也是其他视图构建的基础。由于该视图依赖于底层UI框架,因此WPF按钮的原始视图将与Win32按钮的原始视图不同。

通过在不指定属性的情况下搜索元素或使用 RawViewWalker 浏览树,可以获得原始视图。

AutomationElement elementNode = TreeWalker.RawViewWalker.GetFirstChild(AutomationElement.RootElement);

控件视图(Control View)

UI自动化树的控件视图简化了辅助技术产品描述UI给终端用户并帮助终端用户与应用程序交互的任务,因为它与终端用户感知的UI结构紧密对应。

控件视图是原始视图的一个子集。它包括原始视图中的所有UI项,这些项被用户理解为可交互,或对UI中的控件的逻辑结构起作用。

对UI逻辑结构有贡献但本身不可交互的UI项例如有列表视图的标题、工具栏、菜单和状态栏。

仅用于布局或装饰目的的非交互项不会在控件视图中显示。例如,一个本身不包含任何信息,仅用于布局对话框中的控件的面板。

控件视图中可见的非交互项例如有包含信息的图形和对话框中的静态文本。

控件视图中包含的非交互项不能接收键盘焦点。

通过搜索具有 IsControlElement 属性设置为 true 的元素,或使用 ControlViewWalker 浏览树,可以获得控件视图。

AutomationElement controlViewElementNode = TreeWalker.ControlViewWalker.GetFirstChild(AutomationElement.RootElement);

内容视图(Content View)

UI自动化树的内容视图是控件视图的一个子集。

它包含传达用户界面中真实信息的UI项,包括可以接收键盘焦点的UI项以及一些不是UI项上的标签的文本。例如,下拉组合框中的值将出现在内容视图中,因为它们代表终端用户正在使用的信息。

在内容视图中,组合框和列表框都被表示为一组UI项,其中可以选择一个或多个项。

在内容视图中,一个始终处于打开状态,而另一个可以展开和折叠的事实是无关紧要的,因为它旨在显示呈现给用户的数据或内容。

通过搜索具有 IsContentElement 属性设置为 true 的元素,或使用 ContentViewWalker 浏览树,可以获得内容视图。

AutomationElement ContentViewElementNode = TreeWalker.ContentViewWalker.GetFirstChild(AutomationElement.RootElement);

UI Automation elements(UI自动化元素)

UI自动化元素可以表示各种用户界面元素,例如窗口、按钮、文本框、复选框、列表框、菜单等等。每个元素都有一个唯一的标识符,称为 AutomationID,它可以用来定位和操作元素。例如模拟用户点击、输入文本、选择选项、获取界面元素属性等。

UI Automation properties(UI自动化属性)

每个属性都由一个数字和一个名称标识。属性的名称仅用于调试和诊断。提供程序使用数字ID来标识传入的属性请求。然而,客户端应用程序只使用 AutomationProperty 来标识它们希望检索的属性,AutomationProperty 封装了数字和名称。

表示特定属性的 AutomationProperty 对象可作为各种类中的字段使用。出于安全原因,UI自动化提供程序从 Uiautomationtypes.dll 中包含的一组单独的类中获取这些对象。

根据ID分组

以下表格按包含 AutomationPropertyIDs 的类对属性进行了分类。

属性的种类 客户端从中获取 ID 提供程序从中获取 ID
所有元素共有的属性(请参阅下表) AutomationElement AutomationElementIdentifiers
停靠窗口的位置 DockPattern DockPatternIdentifiers
可展开和折叠的元素的状态 ExpandCollapsePattern ExpandCollapsePatternIdentifiers
网格中某项的属性 GridItemPattern GridItemPatternIdentifiers
网格的属性 GridPattern GridPatternIdentifiers
具有多个视图的元素的当前和支持的视图 MultipleViewPattern MultipleViewPatternIdentifiers
在一定范围的值内移动的元素(如滑块)的属性 RangeValuePattern RangeValuePatternIdentifiers
滚动窗口的属性 ScrollPattern ScrollPatternIdentifiers
可选择的某项(如列表中的某项)的状态和容器 SelectionItemPattern SelectionItemPatternIdentifiers
包含选择项的控件的属性 SelectionPattern SelectionPatternIdentifiers
表中某项的列和行标题 TableItemPattern TableItemPatternIdentifiers
表的列和行标题以及方向 TablePattern TablePatternIdentifiers
切换控件的状态 TogglePattern TogglePatternIdentifiers
可移动、旋转、或调整大小的元素的功能 TransformPattern TransformPatternIdentifiers
具有值的元素的值和读/写功能 ValuePattern ValuePatternIdentifiers
窗口的功能和状态 WindowPattern WindowPatternIdentifiers

根据类别分组

这里只列举根据标识分组,除此之外还有按显示特征分组,按元素类型分组,按交互类型分组,按对模式的支持分组等,详见微软官方文档。

属性标识符 属性访问
AutomationIdProperty AutomationId
ClassNameProperty ClassName
FrameworkIdProperty FrameworkId
LabeledByProperty LabeledBy
NameProperty Name
ProcessIdProperty ProcessId
RuntimeIdProperty GetRuntimeId
NativeWindowHandleProperty NativeWindowHandle

Control patterns(控件模式)

UI自动化使用控件模式来表示常见的控件行为。例如,您可以使用 Invoke 控件模式来处理可以调用的控件(如按钮),并使用 Scroll 控件模式来处理带有滚动条的控件(如列表框、列表视图或组合框)。由于每个控件模式代表着一个独立的功能,它们可以组合在一起描述特定控件支持的完整功能集。

控件模式支持定义控件中可用的离散功能所需的方法、属性、事件和关系。

  • UI自动化元素与其父级、子级和同级之间的关系描述了元素在UI自动化树中的结构。

  • 方法允许UI自动化客户端操作控件。

  • 属性和事件提供有关控件模式功能以及控件状态的信息。

控件模式与UI的关系类似于接口与组件对象模型(COM)对象的关系。在COM中,您可以查询对象以了解它支持哪些接口,然后使用这些接口访问功能。在UI自动化中,UI自动化客户端可以询问控件支持哪些控件模式,然后通过支持的控件模式公开的属性、方法、事件和结构与控件进行交互。例如,对于多行编辑框,UI自动化提供程序实现了 IScrollProvider。当客户端知道 AutomationElement 支持 ScrollPattern 控件模式时,它可以使用该控件模式公开的属性、方法和事件来操作控件或访问有关控件的信息。

控件模式类 提供程序接口 说明
DockPattern IDockProvider 用于可在停靠容器中停靠的控件。 例如,工具栏或工具调色板。
ExpandCollapsePattern IExpandCollapseProvider 用于可展开或折叠的控件。 例如,应用程序中的菜单项,如 “文件” 菜单。
GridPattern IGridProvider 用于支持网格功能(如调整大小和移动到指定单元格)的控件。 例如 Windows 资源管理器中的大图标视图或 Microsoft Word 中的不带标头的简单表格。
GridItemPattern IGridItemProvider 用于在网格内具有单元格的控件。 单个单元格应支持 GridItem 模式。 例如 Microsoft Windows 资源管理器详细信息视图中的每个单元格。
InvokePattern IInvokeProvider 用于可被调用的控件,如按钮。
MultipleViewPattern IMultipleViewProvider 用于可在同一组信息、数据或子级的多个表示形式之间切换的控件。 例如,在列表视图控件中,数据可用于缩略图、磁贴、图标、列表或详细信息视图。
RangeValuePattern IRangeValueProvider 用于具有一系列可应用于该控件的值的控件。 例如,包含年份的微调框控件可能具有从 1900 到 2010 的年份范围,而表示月份的另一个微调框控件则会具有从 1 到 12 的月份范围。
ScrollPattern IScrollProvider 用于可滚动的控件。 例如,一个控件其所具有的滚动条在控件的可视区域中存在的信息超过了可被显示的信息时,便处于活动状态。
ScrollItemPattern IScrollItemProvider 用于一种控件,该控件具有可滚动列表中的各个项。 例如,一个列表控件,该控件具有滚动列表中的各个项,如组合框控件。
SelectionPattern ISelectionProvider 用于选择容器控件。 例如,列表框和组合框。
SelectionItemPattern ISelectionItemProvider 用于选择容器控件中的各个项,如列表框和组合框。
TablePattern ITableProvider 用于具有网格以及标头信息的控件。 例如 Microsoft Excel 工作表。
TableItemPattern ITableItemProvider 用于表中的项。
TextPattern ITextProvider 用于可公开文本信息的编辑控件和文档。
TogglePattern IToggleProvider 用于在其中可切换状态的控件。 例如,复选框和可选中的菜单项。
TransformPattern ITransformProvider 用于可调整大小、移动和旋转的控件。 Transform 控件模式通常用于设计器、窗体、图形编辑器和绘图应用程序。
ValuePattern IValueProvider 允许客户端在不支持某个值范围的控件上获取或设置值。 例如,日期时间选择器。
WindowPattern IWindowProvider 向 Microsoft Windows 操作系统公开特定于窗口的信息(一种基本概念)。 属于窗口的控件示例是顶级应用程序窗口(Microsoft Word、Microsoft Windows 资源浏览器等)、多文档界面 (MDI)子窗口和对话框。

UI Automation events(UI自动化事件)

Microsoft UI自动化事件是屏幕阅读器和屏幕放大器等辅助技术的关键功能。这些UI自动化客户端跟踪由UI自动化提供程序触发的事件,当UI中发生某些情况时,它们使用这些信息通知终端用户。

通过允许提供程序应用程序有选择地触发事件,根据是否有客户端订阅这些事件,或者如果没有客户端监听任何事件,则可以完全不触发事件,从而提高效率。

UI 自动化事件有以下类型。更详细内容请阅读微软官方文档。

事件 说明
属性更改 当 UI 自动化元素上的某个属性或控件模式更改时引发。 例如,如果客户端需要监视应用程序的复选框控件,它可以注册来侦听 ToggleState 属性上的属性更改事件。 选中或取消选中该复选框控件时,提供程序会引发事件且客户端会采取必要的操作。
元素操作 当来自最终用户或编程活动的 UI 结果出现更改时引发;例如,单击或通过 InvokePattern 调用一个按钮。
结构更改 在 UI 自动化树的结构更改时引发。 当桌面上有新 UI 项变得可见、隐藏或删除时,结果便发生更改。
全局桌面更改 当与客户端相关的的全局操作发生时引发,例如当焦点从一个元素转换到另一个元素、或窗口关闭时。

结尾

文中只列举了部分内容,更详细内容请阅读微软官方文档,文档还是很详细的,比较难受的地方就是示例代码太少,可能需要自己发掘了。文章来源地址https://www.toymoban.com/news/detail-718939.html

到了这里,关于UI自动化 --- UI Automation 基础详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Uiautomator2实现Android自动化测试详解

    目录 1、UIautomator2框架原理 2、UIautomator2使用 2.1、安装 2.2、元素定位工具-weditor 2.3、设备连接 2.4、全局配置 2.4.1、通过settings设置 2.4.2、通过属性设置 2.5、APP相关操作 2.5.1、安装应用 2.5.2、启动应用 2.5.3、等待应用启动 2.5.4、结束应用 2.5.5、卸载应用 2.5.6、获取当前上层AP

    2024年02月20日
    浏览(27)
  • 移动端APP自动化测试框架-UiAutomator2基础

    很早以前,我用uiautomator+java实践过Android APP自动化测试,不过今天要提的不是uiautomator,而是uiautomator2。听起来uiautomator2像是uiautomator的升级版,但是这两款框架仅仅是名字上比较相似,实际上没有任何关联。 项目地址:https://github.com/openatx/uiautomator2 1.官方文档介绍 2.梳理一

    2024年02月13日
    浏览(49)
  • 掌握 Android 自动化测试框架 UiAutomator & UiAutomator2

    你是否曾经在进行 Android 应用开发时,对于如何进行全面、有效的自动化测试感到困惑?你是否想要更高效地进行 UI 测试,而不是一遍遍地手动点击屏幕?那么,这篇文章将会为你揭示一种强大的自动化测试工具——UiAutomator,而且,我们还会进一步探讨它的升级版本——

    2024年02月10日
    浏览(27)
  • 安卓手机 Python 自动化( uiautomation、uiautomation2、weditor )

    其他自动化工具或者框架: Airtest:https://airtest.readthedocs.io/zh_CN/latest/ autojs:Auto.js快速入门实战教程:https://zhuanlan.zhihu.com/p/90065914 appium:https://blog.csdn.net/freeking101/article/details/107881979 AutomateIt、Automate、按键精灵、AutoJS 等 Android 自动化工具有什么特点?:https://www.zhihu.com/qu

    2024年02月09日
    浏览(32)
  • App自动化部署:uiautomator2

    快速安装库: pip3 install 库名 -i Simple Index --trusted-host pypi.douban.com appium缺点: appium运行慢、时间长 在低版本的appium上获取toast(消息弹窗)需要切换automationName uiautomator2优点: 环境搭建简单方便 执行速度很快 UI元素定位便捷好用、可视化好 获取toast非常简单 注意:uiautomatorvi

    2024年02月11日
    浏览(32)
  • 探索Python自动化利器:Windows UIAutomation

    项目地址:https://gitcode.com/yinkaisheng/Python-UIAutomation-for-Windows 在计算机自动化领域,Python一直以其强大的库支持和简洁的语法深受开发者喜爱。对于Windows平台上的图形界面自动化测试或任务执行,Python-UIAutomation-for-Windows项目提供了一个极其有用的工具集。本文将深入探讨该项目

    2024年04月25日
    浏览(22)
  • 【AI写作】 机器人流程自动化 介绍 - Robotic Process Automation (RPA) Introduction

    写一篇文章介绍RPA技术,未来的发展。使用markdown格式,有3级索引,超过3000字。 某位大师说过的: 任何行业、任何部门都有大量的场景,涉及重复、有规则逻辑的工作,都可以用 RPA 开发一个软件机器人帮助完成。

    2024年02月15日
    浏览(43)
  • 0.uiautomation自动化库的详细目录索引

    类class ListControl列表控件 TabControl标签页控制器 Keys键盘按键 Rect矩形 WindowControl窗口控件 ButtonControl按钮控件 PaneControl窗格控件 CheckBoxControl复选框控件 ToggleState切换状态 在软件开发和用户界面设计中,它通常指的是一个可以切换两种或多种不同状态的控件(如复选框、开关按

    2024年04月27日
    浏览(28)
  • 如何使用IOS自动化测试工具UIAutomation

    这篇文章主要介绍了UIAutomation使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值 第一部分: 熟悉Instruments的UIAutomation. 第二部分: 控件的获取及操作 第三部分: 自定义自动化脚本 xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行内

    2024年02月03日
    浏览(30)
  • python控制Windows桌面程序自动化模块uiautomation

    github仓库地址:GitHub - yinkaisheng/Python-UIAutomation-for-Windows: (Donot use 3.7.6,3.8.1):snake:Python 3 wrapper of Microsoft UIAutomation. Support UIAutomation for MFC, WindowsForm, WPF, Modern UI(Metro UI), Qt, IE, Firefox, Chrome ...   uiautomation封装了微软UIAutomation API,支持自动化Win32,MFC,WPF,Modern UI(Metro UI), Qt, IE, F

    2024年02月04日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包