疑似bug: matches字段中包含多个选择器时无法触发点击
Closed this issue · 4 comments
一些验证
- 搜索检查是否已经存在请求相同功能的问题/讨论,以避免重复创建问题
- GKD 默认不包含任何规则, 如果您想要自定义规则, 您可以 查看文档
- 1.我确认知晓并同意维护者直接关闭不符合 issue 规范的问题
- 2.我确认知晓并同意维护者直接关闭不符合 issue 规范的问题
- 3.我确认知晓并同意维护者直接关闭不符合 issue 规范的问题
- 我已确保提供下列的日志和BUG描述及其复现步骤, 否则我同意维护者直接关闭问题
日志文件-无论什么问题不包含日志将会被直接关闭
BUG描述(文字/截图/视频)
APP版本:1.7.3
按API docs里的描述,规则中的matches
字段可以是包含多个选择器的IArray
:
https://gkd.li/api/interfaces/RawRuleProps#matches
但以下规则无法触发点击事件(快照节点满足key: 0
的第一条选择器):
{
id: 'com.zhihu.android',
name: '知乎',
groups: [
{
key: 1,
name: '分段广告-推荐页-问题广告卡片',
activityIds: 'com.zhihu.android.app.ui.activity.MainActivity',
rules: [
{
key: 0,
matches: [
'@ImageView[id=`com.zhihu.android:id/menu`] < FrameLayout - * > TextView[text^=`广告`]',
'@ImageView < ViewGroup -3 TextView[text^=`广告`]',
],
snapshotUrls: 'https://i.gkd.li/import/14881985',
},
{
key: 1,
quickFind: true,
matches:
'@ViewGroup[clickable=true] <3 ViewGroup < ViewGroup -n ViewGroup > ViewGroup > TextView[text=" 的广告"]',
},
{
key: 90,
preKeys: [0],
quickFind: true,
matches: [
'@FrameLayout[clickable=true] >3 TextView[text="屏蔽该内容"][id="com.zhihu.android:id/tv_content"]',
'@LinearLayout[clickable=true] >3 TextView[text="不感兴趣"][id="com.zhihu.android:id/title"]',
],
},
{
key: 91,
preKeys: [1],
quickFind: true,
matches:
'@FrameLayout > LinearLayoutCompat[id="com.zhihu.android:id/ll_container"] >2 TextView[text="内容不感兴趣"][id="com.zhihu.android:id/tv_content"]',
},
],
},
],
}
如果将matches
改为只有一条选择器,则可以正确触发点击事件:
{
id: 'com.zhihu.android',
name: '知乎',
groups: [
{
key: 1,
name: '分段广告-推荐页-问题广告卡片',
activityIds: 'com.zhihu.android.app.ui.activity.MainActivity',
rules: [
{
key: 0,
matches: '@ImageView[id=`com.zhihu.android:id/menu`] < FrameLayout - * > TextView[text^=`广告`]',
snapshotUrls: 'https://i.gkd.li/import/14881985',
},
{
key: 1,
quickFind: true,
matches:
'@ViewGroup[clickable=true] <3 ViewGroup < ViewGroup -n ViewGroup > ViewGroup > TextView[text=" 的广告"]',
},
{
key: 90,
preKeys: [0],
quickFind: true,
matches: '@LinearLayout[clickable=true] >3 TextView[text="不感兴趣"][id="com.zhihu.android:id/title"]',
},
{
key: 91,
preKeys: [1],
quickFind: true,
matches:
'@FrameLayout > LinearLayoutCompat[id="com.zhihu.android:id/ll_container"] >2 TextView[text="内容不感兴趣"][id="com.zhihu.android:id/tv_content"]',
},
],
},
],
}
请问这是matches
的特性还是一个bug?
期望行为(文字/截图/视频)
包含多个选择器的matches
字段在满足其中一个选择器时可以正常触发点击事件
实际行为(文字/截图/视频)
包含多个选择器的matches
字段在满足其中一个选择器时无法触发点击事件
https://gkd.li/api/interfaces/RawRuleProps#matches 的注释是
一个或者多个合法的 GKD 选择器, 如果每个选择器都能匹配上节点, 那么点击最后一个选择器的目标节点
在 https://i.gkd.li/import/14881985 中并不能选择到 @ImageView < ViewGroup -3 TextView[text^='广告']
不满足 如果每个选择器都能匹配上节点
这个条件
https://gkd.li/api/interfaces/RawRuleProps#matches 的注释是
一个或者多个合法的 GKD 选择器, 如果每个选择器都能匹配上节点, 那么点击最后一个选择器的目标节点
在 https://i.gkd.li/import/14881985 中并不能选择到
@ImageView < ViewGroup -3 TextView[text^='广告']
不满足
如果每个选择器都能匹配上节点
这个条件
我之前的理解是:当二者都能匹配时,点击最后一个选择器的目标节点;当其中一种匹配时,使用匹配的那个选择器。
看来是我理解错了,感谢解惑
你说的那种叫 anyMatches
我还没考虑支持
因为它可以通过多个 rule 的单个 matches 去实现
因为它可以通过多个 rule 的单个 matches 去实现
但是的确精简了规则代码