控件的虚拟化
在进行桌面应用的自动化测试中,我们通常依赖对象识别技术来定位和操作控件(如按钮、菜单、文本框等)。然而,有些控件由于是自定义绘制的(如非标准控件、特殊图标按钮、动态生成的元素)而无法通过传统的对象识别方式获取。这时,可以借助控件的虚拟化技术来解决问题。
虚拟化控件的核心思想是:
在运行时为一个已识别到的控件(例如一个工具栏整体)动态生成一个虚拟控件,该虚拟控件与实际控件在大小、位置上完全一致。 这样一来,即便其中的子元素不能被直接识别,我们仍然可以通过虚拟控件提供的方法(如OCR识别文本、基于视觉的点击)来对其内部元素进行自动化操作。
适用场景
设想以下场景:
某个应用的工具栏是自绘制的,并未使用标准控件来呈现按钮。工具栏整体能够被自动化工具识别,但其中的每个按钮(带有文字的小图标)却无法单独识别出来。此时,如果我们想点击“打开”按钮,就无法直接通过model.getButton("Open")
之类的方法来获取它。
在这种情况下,我们可以通过以下步骤实现点击“打开”按钮:
- 识别整个工具栏控件:假设已通过模型将工具栏作为一个
Pane
或其他可识别对象加载到脚本中。 - 获取虚拟控件:对该工具栏调用
getVirtual()
方法(不传入任何参数),即可获得一个覆盖整个工具栏区域的虚拟控件对象。 - 基于文本点击:虚拟控件通常提供
clickVirtualText()
或类似的OCR相关方法。我们可利用该方法,通过按钮上的文字内容(如“打开”)来定位并点击该按钮所在区域。
使用示例
以下是使用JavaScript和Python的示例代码。当工具栏对象名为 "ToolBar"
时,我们可以这样写:
JavaScript
Python
await model.getPane("ToolBar").getVirtual().clickVirtualText('打开');
model.getPane("ToolBar").getVirtual().clickVirtualText('打开')
通过上述代码,测试脚本会在虚拟控件中识别文本“打开”的位置,然后模拟点击该区域,从而成功点击实际工具栏中的“打开”按钮。