曾使用 Xpath 定位,感觉定位速度好慢。看到有人说 UiAutomator 的定位方式比 Xpath 快,就想试试。
搜索了很多 UiAutomator 定位方法的介绍,大多都是很简单的,如何用 resourceId, text, className,description 等来定位的介绍,还有就是组合定位的方法:通过父元素定位子元素 UiSelector.childSelector 和通过同一级父元素下的兄弟元素的定位方法 UiSelector.fromParent,但是觉得其中有许多值得进一步确认的地方,以及想要请教一下大家使用这种定位方式的细节。
一个是 childSelector 的定位,当我通过父元素定位子元素,明明存在很多个子元素,但是只能定位到第一个:
如下图:
定位方式:resourceId("com.starnet.GreenHome:id/recycle_my_fun").childSelector(className("android.view.ViewGroup"))
结果:
经过测试发现,可以通过resourceId("com.starnet.GreenHome:id/recycle_my_fun").childSelector(className("android.view.ViewGroup").index(1))
定位到第二个,那怎么定位到所有元素呢?
看到有人问过这个问题,但是没有回答( https://testerhome.com/topics/15570)
注:经过多次试验,当使用 python 语言时,resourceId 必须用双引号括起来,不然定位不到。
一个则是 https://testerhome.com/topics/27597 中提到的 UiScrolllable,滚动查找时,当找不到则会先选中中间那个,所以会打开中间那个的页面,有没有办法不点击呢?
代码如下:
new UiScrollable(new UiSelector().resourceId("com.starnet.GreenHome:id/recycle_community_service")).scrollIntoView(new UiSelector().text("信息"))
结果:使用 appium server 进行搜索时,没有滑动,而是点开了中间那个方块。运行代码,提示目标元素不存在。
详见: https://testerhome.com/topics/27597