描述模式

描述模式是一种在代码中直接通过属性构造测试对象的方式。

这种做法与使用对象模型来加载测试对象的传统方法不同。在描述模式中,可以通过WinAutoQtAuto等对象,调用get[ControlType]方法(如WinAuto.getWindow()WinAuto.getButton()等)来实现这一点。这些get[ControlType]方法需要一个对象作为参数,这个对象包含了一组属性。这组属性以逻辑“AND”的形式结合起来,定义了一个查询条件,用于查找界面上的控件。

示例:直接构造测试对象

以下示例展示了如何直接从属性构造测试对象,而无需加载对象模型:

JavaScript
Python
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()

在上述示例中,每个方法调用都传递了一个对象参数,其中包含多个键值对。这些键值对组合起来形成了用于查找测试对象的过滤条件。

简化对象查找

如果您要操作的对象具有唯一标识,您可以省略中间的层次结构,直接使用顶层窗口对象和目标操作对象级联,如下所示:

JavaScript
Python
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,因此无需通过中间对象也能直接定位到该按钮,从而简化了代码。

批量传递属性

您还可以选择以数组形式一次性传递属性,从而避免多次调用:

JavaScript
Python
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()

优缺点及应用场景

描述模式的优点在于无需依赖于对象模型,可以动态构建测试对象,或访问界面上动态创建的控件。其缺点是不能集中管理测试对象,也不能使用对象管理器的编辑界面修改或验证测试对象,维护成本较高。因此,您可以根据具体场景选择是否使用描述模式。

生成代码的方法

描述模式的代码可以手动编写,但通过模型管理器可以更方便地生成描述模式的代码:

  1. 点击“添加对象”并检测到控件后,在弹出的“添加对象”对话框中点击“复制代码”,即可将描述模式代码复制到剪贴板中。

  2. 在测试对象编辑界面,点击描述模式开关描述模式开关,开启“描述模式”(按钮按下表示开启),此时复制的代码即为描述模式代码。

  3. 在对象属性界面,点击“复制级联节点属性”,会将控件节点的所有父节点信息一并复制,并以数组形式呈现。复制得到的属性可直接作为get[ControlType]方法的参数使用。

通过上述方法,可以更加高效地利用描述模式进行自动化测试。

results matching ""

    No results matching ""