UI自动化测试中,有时候会遇到一个界面上有多同类型控件,这些控件有相同的id或属性,不具备唯一性,所以无法直接进行指定控件的定位操作,如下:
由上图可以看到,所有勾选控件的结构是一样的,相对位置是固定的,而勾选控件相对它们的"哥哥"节点的TextView是不同的:
这样就可以先定位至"哥哥"节点,在根据相对位置,定位到指定的控件节点
在xpath中提供了多种轴方法,其中following-sibling可实现此功能
如我们要定位"画好一个封闭的圆"后面的叉号,具体写法如下:
//下面两种写法均可实现
By.xpath("((//*[@text='画好一个封闭的圆'])[2]/following-sibling::android.widget.RelativeLayout)[2]")
By.xpath("((//*[@text='画好一个封闭的圆'])[2]/following-sibling::*[@class='android.widget.RelativeLayout'])[2]")