最近在协助测试小组做一些 GUI 方面的自动化测试,主要使用了 Python 中的 dogtail 框架,以及 Qt 中的 Accessibility 技术。

这个东西很有意思,可以让 GUI 的测试变得很方便,比如:模拟鼠标点击、用户输入等。因此在这里分享一下,希望能帮到大家!

1

概念描述

关于 dogtail

dogtail 是一个用 Python 编写的 GUI 自动化测试框架,它使用 Accessibility(a11y)技术与桌面应用程序通信。

dogtail 脚本是用 Python 编写的,并能够像其他 Python 程序一样执行。

sniff 组件

在 dogtail 的发行包中,自带了一个 sniff 组件(嗅探器),该组件在 GUI 程序追踪方面非常有用。

打开终端,执行 sniff 命令,会弹出一个 AT-SPI Browser 界面,里面包含了所有正在运行的程序。值得一提的是,这些程序是以 tree 的形式显示的。因此在 sniff 程序里面,根据显示便能够很容易地查看所要调试程序的 layout。

Accessibility 技术

既然 dogtail 利用 Accessibility 技术与桌面程序通信,那么想自动化测试 Qt 程序,就必须启用 Qt Accessibility。

Qt 中的 Accessibility 支持包含了一个通用接口,该接口对每种平台实现了一项技术:Windows 上的 MSAA、Mac 上的 Mac OS X accessibility,以及 Linux 上的 Unix/X11 AT-SPI。Qt 的 Accessibility 接口严格遵循 MSAA 标准。那么,什么是 MSAA 呢?

MSAA 全称为 Microsoft Active Accessibility,其初衷是为了方便残疾人士使用电脑 - 可用于放大器、屏幕阅读器,以及触觉型鼠标。比如盲人看不到窗口,但是他可以通过一个 USB 读屏器连接到电脑上,读屏器通过 UI 程序暴露出来的这个 Interface,就可以获取程序信息,通过盲文或者其它形式传递给盲人。

MSAA 的主要思想是提供一种以程序方式访问 UI 元素信息或操作这些 UI 元素的功能。支持这种功能的 UI 元素是可访问的。在大多数情况下,这意味着一个 UI 元素支持 IAccessible 接口。你也可以说在 MSAA 的世界里,一个可访问的 UI 元素可表示为 IAccessible 接口。

2

环境安装

安装依赖

要使用 dogtail,首先要安装依赖:

get install python3-pyatspi python3-pyqt5

安装 dogtail

下载 dogtail 源码(地址:https://gitlab.com/dogtail/dogtail/),并进行安装:

$ sudo python3 setup.py install

3

测试脚本

为了实现自动化测试,先用 Qt 编写一个简单的示例程序 - Sample01。

显示一个 button,并连接它的 clicked() 信号,当鼠标被点击之后,文本发生改变:

#include 

现在编写 Python 脚本 - autotest.py,模拟鼠标点击程序中的按钮:

#!/usr/bin/env python3

4

执行自动化

运行上述的示例程序,然后执行 sniff 命令,可以查看 Sample01 的标记:

$ sniff

运行 Python 脚本,执行自动化测试:

$ python3 autotest.py

恭喜,这时候你就能看到鼠标被自动点击了。

后面还有更多有意思的功能,比如模拟键盘输入、自动生成测试报告等,敬请期待!

5

更多参考

  • dogtail 源码:https://gitlab.com/dogtail/dogtail/

  • dogtail api:http://fedorapeople.org/~vhumpa/dogtail/epydoc/

  • dogtail 教程:https://wiki.ubuntu.com/Testing/Automation/DogtailTutorial

  • 辅助功能在 GNOME 中如何工作:https://developer.gnome.org/accessibility-devel-guide/stable/gad-how-it-works.html.zh_CN

·END·

作者:一去、二三里爱学习,爱编程,爱生活。欢迎来撩,一起畅谈程序人生!

点个在看,么么哒!

Qt利用avilib实现录屏功能_利用 dogtail 快速进行 GUI 自动化测试相关推荐

  1. Qt利用avilib实现录屏功能_利用“别名”实现Sendmail的邮件群发和邮件备份功能...

    前序 Sendmail服务器是一款经典的邮件发送软件,利用SMTP协议,实现邮件的发送,在CentOS7 邮件服务器部署(sendmail)中,我们学习了sendmail的基础配置,今天我们通过Lin ...

  2. Qt利用avilib实现录屏功能,生成avi文件

    环境: Qt + vs2013 + avilib demo下载:https://download.csdn.net/download/birenxiaofeigg/12087607 界面 开始录制: ...

  3. Qt利用avilib实现录屏功能_openlayers6结合geoserver利用WFS服务实现图层编辑功能(附源码下载)...

    内容概览 1.openlayers6结合geoserver利用WFS服务实现图层编辑功能 2.源代码demo下载 效果图如下: 本篇主要是参照openlayers6结合geoserver利用WFS服务 ...

  4. 苹果手机怎么设置录屏功能_苹果手机怎么录屏 苹果手机录屏功能开启/使用教程...

    1.首先需要到设置中将录屏功能添加到控制中心,打开"设置--控制中心",点击"自定控制": 2.在自定义控制中,点击"屏幕录制"前面的加号, ...

  5. Qt+ffmpeg+avilib实现录屏录音的功能(包含合成)

    骤: 1.录屏 思路:子线程进行截屏的方式进行录制,再使用avilib将截取到的图片保存为视频文件. 参考文章:avilib库的使用 - Ron's个人页面 - OSCHINA - 中文开源技术交流社 ...

  6. 字节跳动 录屏功能_视频激励-录屏分享参考规范

    背景 [视频录制及分享]是字节跳动系平台独有的也是最核心的内容展示能力及产品分发能力.我们希望通过平台提供的视频相关 api 接口能力,能让小游戏发行和平台能力充分结合,更好的利用,帮助小游戏在本平台 ...

  7. 字节跳动 录屏功能_免费屏幕录制软件有哪些?原来这么多

    免费屏幕录制软件有哪些?对于一些使用电脑进行办公的小伙伴来说,能够有一款免费屏幕录制软件实在是太重要了.但众所周知的是,目前这种类型的软件几乎是没有的,即使有也只能进行几分钟的免费录制.所以这里小编为 ...

  8. 字节跳动 录屏功能_屏幕录制工具分享,便捷录屏就用它

    原标题:屏幕录制工具分享,便捷录屏就用它 前段时间,一直都有一个网友追着问小北,说哪款屏幕录制软件工具最好,小北虽然被问得有些无奈,却一直都没有回应这个问题.为啥呢?因为现如今网上可以找到的录屏工具真 ...

  9. 字节跳动 录屏功能_一周盘点:Instagram打通视频购物功能 公开叫板TikTok;字节跳动要大力布局跨境出口电商?...

    周末刚结束,预祝各位小伙伴们在接下来的每一天都能大卖! 大师兄先带你盘点这一周都有哪一些跨境电商热点事件: 每周要点 Instagram打通视频购物功能 公开叫板TikTok 据外媒报道,Instag ...

最新文章

  1. GeforceRTX系列参数对比
  2. Servlet 工作原理解析
  3. pdo mysql防注入_Php中用PDO查询Mysql来避免SQL注入风险的方法
  4. oracle 数据库日常巡检:数据库基本状况、oracle资源使用、数据备份结果、性能、cpu等、数据安全、归档日志、会话、SGA/PGA使用情况
  5. Linux基础-yum软件包管理
  6. 2022年学Web前端怎么样?还有发展前景吗?
  7. PHP 数组遍历 foreach 语法结构
  8. 【转】路由转发过程的IP及MAC地址变化
  9. html, xhtml和xml
  10. protobuf 向前兼容向后兼容
  11. 操作系统 第四章 文件管理
  12. 初笔,JAVA.HelloWorld代码详解
  13. 在Jupyter Notebook中运行R (附一系列疑难解答)
  14. [转载] Python集合取交集intersection()函数和intersection_update()函数
  15. 2018年TI杯大学生电子设计竞赛
  16. 电子设计大赛-电源类题目分析
  17. repeate数据展示
  18. Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)
  19. 旺店通·企业奇门与金蝶云星空对接集成查询退货入库单打通销售退货新增
  20. TikZ宏包子库汇总和简介

热门文章

  1. python怎么编程上传资料_Python实现文件上传
  2. Kali Linux 2020.1乱码问题
  3. ​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数
  4. swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程
  5. echart横轴文字显示省略号_echarts X轴显示不全 有省略
  6. python获取今年第一天_利用python获取某年中每个月的第一天和最后一天
  7. h5执行php函数,值得一个的5个强大的HTML5API 函数
  8. SpaceX「十一手」火箭创纪录,一天内两次升空,马斯克:飞100次才退役
  9. 起底在线教育行业的技术霸主
  10. 疫苗有效,先抛股票,今日官宣94.5%结果的Moderna高管早有信心