建议控件XPath采用“属性筛选”方法,而非现在的“纯索引”方法

功能建议 · 4847 次浏览
独木不成林同学 创建于 21天11小时前

最近才发现同一个控件的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。如果可以的话,提供选项由用户自行选择


回复内容
CL 21天11小时前
#1

有道理,等研究下

独木不成林同学 回复 CL 21天11小时前 :

好的呢,坐等更新☺️

CL 18天10小时前
#2

https://getquicker.net/Help/Versions 更新了一版,试一下看看。

独木不成林同学 回复 CL 18天9小时前 :

哇,试了很好用。

独木不成林同学 回复 CL 18天8小时前 :

不过,好像发现了两个小问题。


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)可以变成“纯层级”写法了

独木不成林同学 最后更新于 18天8小时前
CL 回复 独木不成林同学 18天1小时前 :

你说的”FlaUI探测器“是哪个程序呀?官方FlaUInspect,我试了只有序号形式的


独木不成林同学 回复 CL 18天0小时前 :
有个FlaUI探测器动作:https://getquicker.net/Sharedaction?code=00f702eb-4102-4491-7a36-08dd6f27fa40
CL 回复 独木不成林同学 18天0小时前 :

好,我去学习学习

CL 回复 独木不成林同学 17天22小时前 :

第一个问题可能和检测的位置有关,我试了这个探测器,在资源管理器里无法定位到某个目录节点。

这个Name属性我发现不太行,太容易变化了。 比如资源管理器里选择的目录一边,这个标签页的Name就会改变了。导致甚至不如序号可用。ClassName本身没有太大意义,和ControlType大多数情况下差不太多。 目前感觉只保留AutomationId + 序号比较合适。

独木不成林同学 回复 CL 17天21小时前 :

以explorer定位标签页文字为例。

新版本1.44.51的结果:/Pane[@ClassName='Microsoft.UI.Content.DesktopChildSiteBridge']

其他软件如图

独木不成林同学 回复 CL 17天21小时前 :

Name属性有点像控件名称,一般开发者会命名相同,可以参考豆包给的结果


CL 回复 独木不成林同学 17天19小时前 :

这个”此电脑“,你选其它目录的时候就会变了。我这里测试的时候没有遇到 /Pane[@ClassName='Microsoft.UI.Content.DesktopChildSiteBridge'] 这样的,暂不清楚和什么有关系。 你试试换一个别的程序界面看看。

独木不成林同学 回复 CL 17天19小时前 :

我重启电脑、软件后测试,问题仍旧。我获取的位置如图

CL 回复 独木不成林同学 17天18小时前 :

标签页的标题? 可以换别的软件试一下,比如控制面板的那些对话框啥的。


独木不成林同学 回复 CL 17天14小时前 :

试了几款软件,没发现问题的:控制面板、Win+i设置、WPS、Edge。

Everything(1.5a)、Directory Opus的顶部菜单栏或工具栏都无法识别到具体按键(只能识别到如图整个栏)

微信和任务管理器都是只能检测到根窗口层


CL 回复 独木不成林同学 17天11小时前 :

我这里测试任务管理器是正常的。 

可能某个因素影响的。 你方便的时候试试重启一下系统,先不要使用别的程序获取xpath,直接用quicker测试看看。

UIAutomation有2和3,不清楚会不会干扰。

回复主贴