描述模式
描述模式是一种在代码中直接通过属性构造测试对象的方式。
这种做法与使用对象模型来加载测试对象的传统方法不同。在描述模式中,可以通过WinAuto
或QtAuto
等对象,调用get[ControlType]
方法(如WinAuto.getWindow()
、WinAuto.getButton()
等)来实现这一点。这些get[ControlType]
方法需要一个对象作为参数,这个对象包含了一组属性。这组属性以逻辑“AND”的形式结合起来,定义了一个查询条件,用于查找界面上的控件。
示例:直接构造测试对象
以下示例展示了如何直接从属性构造测试对象,而无需加载对象模型:
const { WinAuto } = require('leanpro.win');
WinAuto.getWindow({
"className": "ApplicationFrameWindow",
"title": "计算器"
}).getWindow({
"className": "Windows.UI.Core.CoreWindow",
"title": "计算器"
}).getGeneric({
"type": "Group",
"automationId": "NumberPad",
"name": "数字键盘"
}).getButton({
"automationId": "num5Button"
}).click();
from leanproAuto import WinAuto
WinAuto.getWindow({
"className": "ApplicationFrameWindow",
"title": "计算器"
}).getWindow({
"className": "Windows.UI.Core.CoreWindow",
"title": "计算器"
}).getGeneric({
"type": "Group",
"automationId": "NumberPad",
"name": "数字键盘"
}).getButton({
"automationId": "num5Button"
}).click()
在上述示例中,每个方法调用都传递了一个对象参数,其中包含多个键值对。这些键值对组合起来形成了用于查找测试对象的过滤条件。
简化对象查找
如果您要操作的对象具有唯一标识,您可以省略中间的层次结构,直接使用顶层窗口对象和目标操作对象级联,如下所示:
const { WinAuto } = require('leanpro.win');
WinAuto.getWindow({
"className": "ApplicationFrameWindow",
"title": "计算器"
}).getButton({
"automationId": "num5Button"
}).click();
from leanproAuto import WinAuto
WinAuto.getWindow({
"className": "ApplicationFrameWindow",
"title": "计算器"
}).getButton({
"automationId": "num5Button"
}).click()
此代码示例中,由于按钮“5”具有唯一的识别属性automationId
,因此无需通过中间对象也能直接定位到该按钮,从而简化了代码。
批量传递属性
您还可以选择以数组形式一次性传递属性,从而避免多次调用:
const { WinAuto } = require('leanpro.win');
WinAuto.getGeneric([
{
"className": "ApplicationFrameWindow",
"title": "计算器"
},{
"className": "Windows.UI.Core.CoreWindow",
"title": "计算器"
},{
"type": "Group",
"automationId": "NumberPad",
"name": "数字键盘"
},{
"automationId": "num5Button"
}
]).click();
from leanproAuto import WinAuto
WinAuto.getGeneric([
{
"className": "ApplicationFrameWindow",
"title": "计算器"
}, {
"className": "Windows.UI.Core.CoreWindow",
"title": "计算器"
}, {
"type": "Group",
"automationId": "NumberPad",
"name": "数字键盘"
}, {
"automationId": "num5Button"
}
]).click()
优缺点及应用场景
描述模式的优点在于无需依赖于对象模型,可以动态构建测试对象,或访问界面上动态创建的控件。其缺点是不能集中管理测试对象,也不能使用对象管理器的编辑界面修改或验证测试对象,维护成本较高。因此,您可以根据具体场景选择是否使用描述模式。
生成代码的方法
描述模式的代码可以手动编写,但通过模型管理器可以更方便地生成描述模式的代码:
点击“添加对象”并检测到控件后,在弹出的“添加对象”对话框中点击“复制代码”,即可将描述模式代码复制到剪贴板中。
在测试对象编辑界面,点击描述模式开关,开启“描述模式”(按钮按下表示开启),此时复制的代码即为描述模式代码。
在对象属性界面,点击“复制级联节点属性”,会将控件节点的所有父节点信息一并复制,并以数组形式呈现。复制得到的属性可直接作为
get[ControlType]
方法的参数使用。
通过上述方法,可以更加高效地利用描述模式进行自动化测试。