You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Appium Android中resourceIdMatches()失效求助——RecyclerView滚动需求

解决Appium UiScrollable正则匹配ResourceId的报错问题

我来帮你搞定这个正则表达式的坑!你遇到的PatternSyntaxException完全是因为对resourceIdMatches的用法理解错了——它接受的是标准正则表达式,不是你以为的通配符规则。

错误原因分析

你写的*:id/timePickerRecyclerMinutes里,*在正则中是「匹配前面元素零次或多次」的量词,但它前面没有任何可匹配的字符,这就导致了语法错误。而你后来尝试的resourceIdMatches("timePickerRecyclerMinutes")也不行,因为正则是完全匹配,你的实际ID是带包名前缀的com.dstarlab.icommunicator.internal:id/timePickerRecyclerMinutes,只写后缀当然匹配不上。

两种可行的修正方案

方案1:使用正确的正则表达式

如果坚持用resourceIdMatches,需要把前缀的通配符改成正则语法的.*(.匹配任意单个字符,*表示零次或多次),这样就能匹配任意包名前缀的ID:

String query = "new UiScrollable(new UiSelector().resourceIdMatches(\".*:id/timePickerRecyclerMinutes\")).scrollIntoView(new UiSelector().text(\"50\"))";

方案2:使用更直观的resourceIdEndsWith(推荐)

不想纠结正则的话,Appium提供了resourceIdEndsWith方法,直接匹配ID的后缀部分,完全避开正则的坑:

String query = "new UiScrollable(new UiSelector().resourceIdEndsWith(\":id/timePickerRecyclerMinutes\")).scrollIntoView(new UiSelector().text(\"50\"))";

验证说明

这两种写法都能精准定位到你的timePickerRecyclerMinutes控件,然后正常执行滚动到文本「50」的操作。你之前用完整ID的resourceId()能正常运行,就是因为它是完全匹配,没有正则的语法问题。

内容的提问来源于stack exchange,提问作者LexSav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:57:40