python自动化神器专题2:选择器/定位器

1,050 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

定位器

做自动化开发的同学大家都知道,选择器(selector),也叫定位器(locator)的稳定性是非常重要的,在软件测试里,用selenium,playwright或者pupperteer的,一般都用css-selector或者xpath来定位,如何生成css-selector或者xpath有一定的学习门槛。 今天介绍的是开发工具clicknium的定位器,可以用录制器自动生成的,支持桌面和web,以及更多详细信息和高级用法。

定位器设置

定位器具有丰富的功能,可以满足不同的 UI 自动化需求。

  • Locator,UI 元素定位器,用于查找元素的字符串(XML 片段),包括应用程序信息和 UI 元素的所有必要父节点,以及每个元素的属性。
  • Locator Store,用于存储定位器数据的文件。默认情况下,同一应用程序的定位器存储在一个定位器存储中。用户可以在 Visual Studio Code 或 Clicnium Recorder 中管理定位器存储。
  • Screenshot,在记录元素时,将截图与定位器一起存储
  • Attribute,用户可以选择/取消选择或编辑每个属性的值。

您可以打开和编辑定位器。

main.png

UI 元素定位器是一个字符串,以下格式的 XML 片段,包含用于定位元素的所有信息。

<应用程序.../><Uia .../>/<Uia .../>
<应用程序 .../><Tab .../>/<Web .../>

第一个节点 Application 包含目标应用程序的属性

Name说明
processName目标进程的名称
filePath进程文件名,定位元素时可以忽略
versionclicknium 定位器架构版本

最后一个节点包含目标 UI 元素的属性。 Application 和最后一个节点之间的节点是目标元素的父级或祖先。

定位器中的属性用于标识目标元素。属性值的运算符默认为 equals,我们支持以下运算符: equalscontainsstartWithendWith。 仅支持通配符搜索的属性,例如 name='test?_node*。 “?”匹配 1 个字符,'*' 匹配 0 个或多个字符可以使用 containsstartWithendWith。 由于 Clicknium 支持不同的自动化技术,在定位器架构中显示为不同的标签和属性集合,后续将介绍不同的录制结束对应的属性列表。。

例子

通配符定位器

打开 Edge 浏览器,按“F12”显示开发者工具边栏,可以看到“切换设备仿真”按钮。

locator_sample1_1.png

如果您捕获按钮“切换设备仿真”的定位器,您可以看到以下定位器。

  • 正常模式

locator_sample1_2.png

  • 移动仿真模式

locator_sample1_3.png

classname 的属性是动态的。为了稳定按钮“切换设备仿真”的识别,您可以利用通配符定位器。

locator_sample1_4.png

在这两种模式下,都可以成功定位到按钮。 并且可以通过get_property知道当前的模式。

from clicknium import clicknium as cc, ui, locator

class_name = ui(locator.msedge.bing.button_toggledeviceemulation).get_property("ClassName")
if class_name.endswith('state-off'):
    print('normal mode')
else:
    print('mobile emulation mode')

以下情况可以视为通配符定位器:

  • 窗口标题是动态的,例如标题包含版本字符串,但应用程序版本可以升级
  • 网页的 url 是动态的
  • 属性的值是动态的