Qt简介
Qt 是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
Qt 支持在Windows,Linux等平台运行,以及包括多达 250 个以上的 C++ 类,同时支持 2D/3D 图形渲染,支持 OpenGL等优异的特性,很多企业会选择使用Qt开发桌面客户端。
下面是Qt的演示样例,里面包含丰富的样例小程序。
由于它的跨平台特点,它的控件实现有自己独特性。自动化测试是一个挑战。有些用户选择在Windows上做自动化,其它平台再手动验证主要场景。本次教程以Windows上面Qt 桌面端为例,讲解如何自动化基于Qt 的Windows桌面应用程序。
桌面端自动化简介
桌面应用自动化从大的类别分主要有两种方式,一种是对象识别,一种是图像识别。对象识别可以通过控件的一些属性特点精准的识别控件,包括它的子控件。图像识别则通过图像匹配,或OCR的方式找到控件,做相应的操作。
图像识别因为识别精度的问题,况且容易受分辨率或其它系统设置的影响,一直无法100%精确定位和操作,一般作为对象识别的辅助手段。
LeanRunner作为使用对象识别方式的自动化工具,能够比较精准的操作控件,特别是Windows复杂控件,如TreeView、ListView、DataGrid等,还能够对它们中间的子控件做相应的操作。此外它能支持多种编程语言,包括Node.js、VBScript、JavaScript (WScript)和C#等,除此之外还能够通过图片自定义虚拟控件。
在这里,主要使用LeanRunner Lite,即LeanRunner 的简化版,它支持Node.js开发脚本,能够在Windows 应用商店自由下载。更多信息可参见相关文档:。
LeanRunner简介
一个LeanRunner自动化脚本由两部份组成:对象模型库和脚本部分。对象模型库存储被测应用界面上的控件识别信息,它还保留了控件层级的信息。
下图为LeanRunner 的模型管理器:
使用模型管理器可以方便的识别各类Windows 桌面端应用控件。
下图为 LeanRunner脚本编辑界面,它可以编辑Node.js、VBScript、JavaScript(WScript)等语言脚本。C#脚本需要在Visual Studio中开发。LeanRunner也提供了Visual Studio的集成。
与模型管理文件结合使用,调用相关的操作API,即可进行UI的自动化。 当被测应用更新时,主要更新对象模型就可以了,提高了脚本的可维护性。
下面可以通过具体的一个操作来熟悉桌面应用自动化的使用方法。
实例操作
- 前提准备
- 安装 Qt 本次测试对象为Qt V4.8.6 版本自带的demo程序。
- 安装 LeanRunner Lite Windows 桌面应用自动化工具 (应用商店地址:)
使用Qt自带的Adrress Book应用,模拟添加一个联系人操作,快速入门Qt桌面应用自动化。
- 准备被测样例 打开Qt Demo中的Item Views--Address Book 样例,点击【add】按钮,弹出添加联系人窗口,输入联系人信息即可添加新的联系人。
下面就上述场景实现自动化:
- 新建项目
打开LeanRunner, 选择【文件】--【新建项目】
填写相应的【项目名】和【项目路径】,点击创建按钮。
默认软件界面如下:
项目已经帮你生成了空的脚本和模型文件。
- 操作模型 点击 model1.tmodel 文件,打开模型管理器窗口。点击【添加对象】按钮,选择 address book中的add按钮:
弹出添加对象对话框。选择【添加】,添加成功后,保存文件。
将add 按钮的元素模型添加到模型文件中。
在模型管理器中选中对应节点,在元素操作界面选择对应操作,点击【复制方法代码到剪贴板】
按照如上操作,可以定位到“新建联系人”窗口中的 【name】,【address】对象。
在定位【name】,【address】控件的时候,由于它们都是Edit类型控件,且其它识别属性都相同。在自动化时会被认为是同一控件。为了区分,在添加对象到模型后,需要为此元素手动添加一个index属性。
添加方式为选择【Edit】节点,【识别控件】点击【添加属性】按钮:
同样为 address 控件以同样方式添加 index属性并设置值为1: 最终对象如下:
- 编辑代码 打开LeanRunner代码编辑 script1.js 文件:
作为node.js代码,LeanRunner使用了async/await语法。不了解的同学可以参考一下node.js文档。
- 在模型管理器中选择【复制模型代码到剪贴板】
将复制的代码粘贴到script1.js文件中。
const { TestModel } = require("leanrunner");var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");(async function() { Paste code here /})();复制代码
我们要模拟点击add按钮的操作,在模型管理器中,选中add 节点,控件操作栏选择click 方法,点击【复制方法到剪贴板】
const { TestModel } = require("leanrunner");var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");(async function () { Paste code here / await model.getButton("Add").click(0, 0, 1);})复制代码
最终代码:
const { TestModel, Util } = require("leanrunner");var model = TestModel.loadModel("E:\\qtdemo\\model1.tmodel");(async function () { Paste code here / await model.getButton("Add").click(0, 0, 1); await model.getEdit("Edit").pressKeys("sam"); await model.getEdit("Edit2").set('china'); await model.getButton("OK").click(0, 0, 1);})();复制代码
上面的代码中await关键字是在异步操作中使用的,因为LeanRunner中所有对控件的操作都是异步调用,所以要加这个关键字。
- 运行代码
保存文件,点击【运行脚本】按钮,即可运行当前代码。可以看到鼠标会自动点击 address book 中的 【add】按钮。
总结:
通过上面的实例,我们可以快速上手构建Windows 应用程序的自动化。此教程为系列教程,会在后面的教程中详细为大家介绍一些Qt复杂控件的自动化技巧以及LeanRunner的高级功能。敬请期待。。。