虚拟控件(Virtual Control)

虚拟控件是通过将某个界面的某个区间定义为一个逻辑的控件。它可以实现以下功能:

  • 调用文字识别(OCR)的方法,通过图像的方式获得文字内容或者操作文字区域。
  • 进行图片比对。
  • 更细粒度的控制。例如某些应用有自绘制的界面,其中的某些按钮是非标准的控件,无法通过识别对象加到模型中。一种对它的操作方法是计算鼠标点击位置。用位置坐标的参数控制它的点击。但是这种点击方法有缺陷:

    • 代码的可读性差
    • 当窗体可拉伸情况下,有效点击坐标位置是变化的。使用虚拟控件可以避免以上的缺陷

下面通过实例,介绍虚拟控件在模型管理器的定义。虚拟控件的API的说明请参见虚拟控件API

在QT中的动画演示样例程序appchooser中有下面的界面。

虚拟控件 - 图1

左图是打开时候的界面,当点击其中的某个图标,图标会放大居中。

为了自动化这个应用,可先识别这个窗体控件,然后在Panel上点右键,选择编辑虚拟控件,并打开虚拟控件对话框:

虚拟控件 - 图2

这里:

  • 添加4个虚拟控件,分别命名为Camera、Glass、Ball、Book
  • 为这些控件在图片上选择对应的区域
  • 选择对齐的方式。例如Book控件选择的是靠右下对齐,这样,当窗体伸缩时,虚拟控件仍旧在右下角对应的位置点击这个图标。
  • 点击确定保存这些虚拟控件。回到模型管理器界面:

虚拟控件 - 图3

可以看到:

  • 虚拟控件在父控件(Custom)中的位置
  • 虚拟控件的方法,包括click、dblClick、wheel、clickVirtualText、getVirtualText、findSnapshot等

为虚拟控件生成代码后如下:

  1. //Node.js code:
  2. model.getVirtual("Camera").click();

可以看到调用非常简洁。

虚拟控件的API的说明请参见虚拟控件API