搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
很楠不爱3
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
RabbitMQ 之 死信队列
2
运行pip报错:Fatal error in launcher: Unable to create process using '’路径’'
3
Android 调节屏幕亮度问题_android params.screenbrightness失效
4
探究人工智能技术在医疗、交通、金融和教育领域的应用和前景_人工智能医疗和金融等行业的应用领域
5
uniapp h5端和react native 通信
6
【优秀课设】基于FPGA的Verilog HDL自动售货机_verilog自动售货机
7
免费申请使用IBM Cloud Lite(轻量套餐) 详细教程指南_ibm不使用行用卡注册
8
用文心一言专业版年卡,新的一年为你想尽办法!
9
PLC-Recorder常用授权功能详解
10
com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could
当前位置:
article
> 正文
使用UI Automation库用于UI自动化测试_ms ui automation
作者:很楠不爱3 | 2024-05-29 16:40:22
赞
踩
ms ui automation
UI
Automation也不是什么新东西了,很久以前曾经用过一次,最近又在一个
测试
中打算使用,于是又翻了一遍MSDN。MSDN里的介绍确实非常详细,但是对于一个刚刚接触的人来说,大而全的文档反而使得无从下手。往往一个简单的Demo比得上大段的文字说明,因此我打算用几个简单的Demo来介绍一下 UI Automation到底是如何使用的。
首先,我们还是得知道UI Automation的MSDN文档在哪。在这:
http://msdn.microsoft.com/en-us/library/ms753107.aspx
我们只看关键的一节:
Using UI Automation for Automated Testing
上面的文档能够在你遇到各种复杂情况下有资料可查,下面就开始我们的Demo,大致分为以下几个步骤。
1. 添加引用。 需要添加UIAutomationClient.dll,UIAutomationClientSideProvider.dll,UIAutomationTypes.dll
2. 添加相应的命名空间System.Windows.Automation。
3. 查找你感兴趣的
控件
。你要单击一个按钮或是在一个文本框输入内容,你得先找到它。要找到你要的控件,你就必须提供一些的标识来定位你的控件,包括:控件类型,标题等等。看一个简单的例子,如何找到一个窗口,标题为"test"。
var desktop = AutomationElement.RootElement; // 先找到根元素,可以认为是桌面
var condition = new PropertyCondition(AutomationElement.NameProperty, "test"); // 定义我们的查找条件,名字是test
var window = desktop.FindFirst(TreeScope.Children, condition); // 在桌面的子控件中查找第一个符合条件的窗体
UI Automation有一个配套的
工具
,用于查看控件的属性和事件,就是UI Spy,单个文件,绿色版,非常好用。
上面的PropertyCondtion是单个的属性条件,如果需要设置多个条件,可以使用AndContion对象。比如,我们在上面的window窗口中其中一个按钮,标题是"ok":
var btnCondition = new AndCondition(
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button),
new PropertyCondition(AutomationElement.NameProperty, "ok"));
我们最常用的几个属性就是AutomationID,ControlType,NameProperty了,这几个属性都可以在UI Spy里查到。
4. 如何触发控件的事件。比如,按钮的点击事件,窗口的拖动事件等等。好是来个简单的例子,也是最最常用的例子,按钮的点击:
var button = window.FindFirst(TreeScope.Children, btnCondition);
var clickPattern = (InvokePattern)button.GetCurrentPattern(InvokePattern.Pattern);
clickPattern.Invoke();
我们怎么知道一个控件有哪些Pattern呢,还是看UI Spy。在左边的树目录中右键需要查看的控件,选中“Control Patterns”就可以查看有哪些Pattern,并且可以进行测试。下面这个地址可以查看一共有哪些Control Pattern,需要用到的时候查一下就知道了:
UI Automation Control Patterns Overview
总结:
可以看出,我上面的例子一共也没多少行,就把UI Automation的基本用法介绍了一遍,这些东西也是最最常使用到的,通常的情况也都能应付过去。如果需要更加深入的内容,就得自己去详细查看MSDN的文档了。
同时,也许你也会发现,这套库用起来比较烦琐,就是简单的查找一个控件也要花费我们不少功夫。所以,我们可以在这套库的基础上去做自己的扩展,编写出一套适合自己的UI自动化库。一个最常见的例子就是做一个
安装
程序的自动化,我们需要去点击上面的下一步按钮,按钮点击后会进行安装操作,这时候按钮是灰色的,安装完成后,按钮恢复可用状态,然后点击完成。因为需要等待完成按钮出现,在自动化实现过程中我们可以实现一个等待控件的通用函数:
static AutomationElement WaitForElement(AutomationElement parent, Condition condition, int milisecondTimeout)
{
var waitTime = 0;
var element = parent.FindFirst(TreeScope.Children, condition);
while (element == null)
{
if (waitTime >= milisecondTimeout)
{
break;
}
Thread.Sleep(500);
waitTime += 500;
element = parent.FindFirst(TreeScope.Children, condition);
}
return element;
}
往往我们使用控件的Name属性来标识,因此,我们可以再一步封装一下:
static AutomationElement WaitForElement(int milisecondTimeout, params string[] controlTexts)
{
var waitTime = 0;
AutomationElement child = null;
while (true)
{
var parent = AutomationElement.RootElement;
var founded = true;
foreach (var text in controlTexts)
{
child = WaitForElement(parent, text, 10);
if (child == null)
{
founded = false;
break;
}
parent = child;
}
if (founded)
{
break;
}
if (waitTime >= milisecondTimeout)
{
child = null;
break;
}
Thread.Sleep(500);
waitTime += 500;
}
return child;
}
因此,我就可以这样来等待一个控件的出现:
var btn = WaitForElement(5000, "安装向导", "完成");
甚至可以把按钮的点击也封装,封装成下面的方式调用,就像在AutoIt脚本里一样简单:
Click("安装向导", "完成");
最后,其实我想说的是,在codeplex上,有一个
开源
项目White,对UI Automation进行了一些易用性上的封装,非常值得我们去学习和参考,甚至直接拿来使用。下一篇我们将继续学习White测试
框架
,敬请关注。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/很楠不爱3/article/detail/643170
推荐阅读
article
雷电
模拟器
+
python
_
python
绑定
雷电
模拟器
...
【代码】
雷电
模拟器
+
python
。_
python
绑定
雷电
模拟器
python
绑定
雷电
模拟器
imp...
赞
踩
article
FPGA
-
06
FPGA
动态
数码管
显示
_4'd0...
让
数码管
各个位
显示
不同的数字,这就需要以
动态
驱动的方式驱动
数码管
。(1)实验任务使用
FPGA
开发板上的6位
数码管
以
动态
方...
赞
踩
article
(开源)
Git
的安装、
环境变量
配置
及
Git
基本操作(基于
Windows10
、11系统_
git
配置
教程...
如今,大量软件项目依赖
Git
进行版本管理,其中既有开源软件,也有商业软件,
Git
在很多操作系统和集成开发环境(ID...
赞
踩
article
山东大学
机器人
实验...
山东大学
自主
机器人
系统实验Github地址还没装matlab,后续更新_
山东大学
机器人
实验
山东大学
机器人
实验 ...
赞
踩
article
MongoDB
权威指南_
mongodb
权威指南...
这是一篇关于
MongoDB
权威指南的文章。本文将从零开始,详细而全面地讲解
MongoDB
的技术细节,并深入到数据库、查询...
赞
踩
article
FPGA
之静态
数码管
显示
实验_微机静态
数码管
实验报告
...
一、背景介绍
数码管
是一种现代常用的数码
显示
器件,具有发光
显示
清晰,响应速度快,功耗低 、体积小、寿命长、易于控制等诸多...
赞
踩
article
视觉族: 基于
Stable
Diffusion
的免费AI绘画
图片
生成器
工具_
stable
diffu...
A: 视觉族生成的
图片
质量取决于多个因素,如提示词的描述、参数的调整等。一般来说,视觉族可以生成高质量、高清晰度、高逼真...
赞
踩
article
书生浦语训练营2期-第三节课—
茴香豆
:
搭建
你
的
RAG
智能助理笔记及
作业
_
lm
studio
ra...
RAG
(Retrieval Augmented Generation)技术,通过检索与用户输入相关
的
信息片段,并结合外部...
赞
踩
article
面部
捕捉
学习
笔记...
面部
捕捉
学习
笔记
面部
捕捉
学习
笔记 目录 FaceShift Studio FaceRig P...
赞
踩
article
【
软件测试
】如何
定位
Bug
_
软件测试
面试
平时出现
bug
是怎么
定位
的
...
1.接收BUG
的
开发人员分类 前端开发-UI开发:开发页面功能 后台开发-服务端开发:提供服务端接口,进行功能处理,逻...
赞
踩
article
服务端
开发
技术
原理、方法与实用
解决方案
:
安全漏洞
与攻击防护_
服务端
开发
:
技术
、方法与实用
解决方案
电子...
服务端
开发
技术
原理、方法与实用
解决方案
:
安全漏洞
与攻击防护随着互联网的快速发展,
服务端
开发
技术
已经成为了软件
开发
中不可或...
赞
踩
article
从零开始的
微信
小
程序
线上商城
开发
(一)_
微信
开发
者
工具
电商界面...
今天开始制作一款
微信
小
程序
,一方面是巩固所学,一方面也在查漏补缺,准备尽可能的将所有电商功能模块都做出来,首先是准备工作...
赞
踩
article
Android
设置
屏幕
亮度
的两种
方式
_
android
设置
默认
屏幕
亮度
百分比...
最近项目需要
设置
Android
设备的
亮度
,本来以为很简单的功能,结果搞了好久才搞定,
Android
在这里埋了一个坑。下面...
赞
踩
article
Mac
上
使用
git
指南
--
持续补充_
mac
git
...
M1芯片ARM版Homebrew会把程序安装到/opt/homebrew/Cellar路径下,而Intel芯片的
Mac
则...
赞
踩
article
时间序列
数据
集
-
Human
Activity
Recognition
database
(
HAR
)_...
Human
Activity
Recognition
database
由 30 名志愿者在携带带有嵌入式惯性传感器的腰...
赞
踩
article
9种
单片机
常用
的
软件
架构
_
单片机
大
项目
程序
架构
...
后面有幸,接触了稍微复杂点
的
项目
,感觉以前水平Hold不住,然后借着
项目
需求,学习了很多优秀
的
代码
架构
,比如以前同事
的
,...
赞
踩
article
android
:
RadioButton
自定义
和非
自定义
的实现_
radiobutton
extends
...
自定义
RadioButton
,更广泛的使用
radiobutton
,实现方法很简单_
radiobutton
extends
...
赞
踩
article
RWKV
模型
启动
工具
RWKV
Runner
新手教程
(
上)...
相对 Transformer 架构,
RWKV
架构的推理成本降低 2~10 倍,训练成本降低 2~3 倍。
RWKV
是一...
赞
踩
article
四款
Python
在线
模拟器...
一、菜鸟工具地址:http://c.runoob.com/compile/9打开的界面是酱紫的左边是代码输入框,右边是结...
赞
踩
article
【电子工程师】
示波器
基础知识
问答_
pfc
输出
纹波
一般
多大...
介绍
示波器
使用中的一些知识_
pfc
输出
纹波
一般
多大
pfc
输出
纹波
一般
多大 ...
赞
踩
相关标签
雷电模拟器
FPGA
动态数码管
显示
开源
git
matlab
机器人
自然语言处理
人工智能
语言模型
编程实践
开发语言
架构设计
深度学习
笔记
大数据
Java
Python
小程序
android
界面