最近才发现同一个控件的XPath,有以下两种写法:
写法1:/Pane[6]/Pane[1]/Pane(写法1由quicker获取)
写法2:/Pane/Pane[1]/Pane[@AutomationId="1"](写法2由FlaUI探测器(FlaUISpy)获取)
写法1依赖控件在同级中的位置(易变)会有很多不稳定因素;写法2依赖控件的AutomationId属性(比较稳定),不会因 UI 布局变化导致 XPath 失效。
之前一直用写法1常出现UI层级改变而失效,现亲测写法2在控件模块中能够正常识别且使用稳定,说明软件能够支持,应该无需大改。
本人建议:quicker软件默认使用写法2。如果可以的话,提供选项由用户自行选择
不过,好像发现了两个小问题。
1. 控件定位粒度太粗,搜索深度不够,技术上我不太懂只是粗浅观察到,以定位Explorer标签页举例:
新版本1.44.51的结果:/Pane[@ClassName='Microsoft.UI.Content.DesktopChildSiteBridge']
FlaUI探测器结果:/Pane/Pane/Tab/List/TabItem[4][@Name="C:\Temp"][@ClassName="ListViewItem"]
2. FlaUI的结果一般都会简洁一些,原因是上层主要用“纯层级”写法,“纯层级”在多标签页或窗口名称变化时也能识别到。以下是浏览器内的控件:
新版本1.44.51的结果:/Pane[@Name='Quicker版本历史 - Quicker - Microsoft Edge - 个人']/Pane/Pane[@ClassName='BrowserFrameViewWin']/Pane[@ClassName='BrowserView']/Pane[@ClassName='TopContainerView']/ToolBar[@AutomationId='view_1044']/Button[@Name='测试'](带属性筛选的绝对路径)
FlaUI探测器结果:/Pane/Pane/Pane[1]/Pane[2]/Pane[1]/ToolBar[2]/Button[24][@AutomationId="view_1047"](纯层级绝对路径)
当然,第2点不是什么问题,手动删除上层属性(如@Name、@ClassName)可以变成“纯层级”写法了