xpath 定位进阶
- 层级定位
- 父节点定位子节点
- 子节点定位父节点
- 子节点定位兄弟节点
- 爷爷节点定位孙子节点
https://www.w3school.com.cn/xpath/xpath_syntax.asp
uiautomator 定位表达式
https://developer.android.com/reference/android/support/test/uiautomator/UiSelecotr.html
-
优点:
- xpath 定位速度慢
- uiautomator 是 android 的工作引擎,速度快
-
缺点:
- 表达式书写复杂,容易写错 IDE 没有提示
-
通过 resourceid 定位
- new UiSelector().resourceId("id")
-
通过 classname 定位
- new UiSelector().className("className")
-
通过 conteng-desc 定位
- new UiSelector().description("content-des 属性")
-
用法:
- ((AndroidDriver<MobileElement>)driver).findElementByAndroidUIAutomator(表达式).click()
通过文本定位
-
通过 text 文本定位语法
- new UiSelector().text("text 文本")
-
如果文本比较长,可以用 textContains 模糊匹配
- new UiSelector().textContains("包含 text 文本")
-
同样可以用 textStartsWith 是以某个文本开头来匹配
- new UiSelector().textStartsWith("以 text 文本开头")
-
也可以用正则表达式 textMatches 匹配
- new UiSelector().textMatches("正则表达式")
-
组合定位
- 例1:id 与 text 属性组合
String id_text = 'resourceId("com.xueqiu.android:id/tab_name").text("交易")' driver.findElementByAndroidUIAutomator(id_text).click()
- 例2:class 与 text 属性结合
String class_text = 'className("android.widget.TextView").text("行情")' driver.findElementByAndroidUIAutomator(class_text).click()
- 例1:id 与 text 属性组合
-
父子关系定位 childSelector
- 有时候不能直接定位某个元素,但是它的父元素很好定位,这时候就先定位父元素,通过父元素找儿子
- son = 'resourceId("com.xueqiu.android:id/scroll_view").childSelector(text("热门"))'
-
兄弟定位 fromParent
- 有时候父元素不好定位,但是跟他相邻的兄弟元素很好定位,这时候就可以通过兄弟元素,找到同一父级元素下的子元素
- brother = 'resourceId("com.xueqiu.android:id/tab_name").fromParent(text("我的"))'
滑动定位
- 实现滚动查找元素
- 'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("查找的文本").instance(0));'