元素定位方式有多種,Android也有自身獨有的定位方式。下面就單獨介紹其基於uiautomator定位元素的方法:
基本語法:
driver.find_element_by_android_uiautomator(xx)
1).通過text文本定位語法
new UiSelector().text("text文本")
#text loc_text = 'new UiSelector().text("圖書")' driver.find_element_by_android_uiautomator(loc_text).click()
2).如果文本比較長,可以用textContains模糊匹配
new UiSelector().textContains("包含text文本")
# textContains loc_textContains = 'new UiSelector().textContains("圖")' driver.find_element_by_android_uiautomator(loc_textContains).click()
3).同樣可以用textStartsWith是以某個文本開頭來匹配
new UiSelector().textStartsWith("以text文本開頭")
#textStartsWith loc_textStart = 'new UiSelector().textStartsWith("圖")' driver.find_element_by_android_uiautomator(loc_textStart).click()
4).也可以用正則表達式textMatches匹配
new UiSelector().textMatches("正則表達式")
2.resourceId
與by_id一樣
new UiSelector().resourceId("id")
#resourceId loc_id = 'new UiSelector().resourceId("com.baidu.yuedu:id/webbooktitle")' driver.find_element_by_android_uiautomator(loc_id).click()
3.className
頁面上的class屬性一般不唯一,多半用在復數定位時候。此時定位相應下標
new UiSelector().className("className")
#className復數定位 loc_class = 'new UiSelector().className("android.widget.TextView")' driver.find_elements_by_android_uiautomator(loc_class)[2].click()
4.description
也是用contenet-des屬性定位
new UiSelector().description("contenet-des屬性")
5.組合定位
1).id與text屬性組合
#id+text id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小說")' driver.find_element_by_android_uiautomator(id_text).click()
2).class與text屬性組合
#class+text class_text = 'className("android.widget.TextView").text("圖書")' driver.find_element_by_android_uiautomator(class_text).click()
6.關系定位
1).父子定位childSelector
有時候不能直接定位某個元素,但是它的父元素很好定位,這時候就先定位父元素,通過父元素找兒子
如上定位書架:
#父子關系childSelector son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小說"))' driver.find_element_by_android_uiautomator(son).click()
2).兄弟定位fromParent
有時候父元素不好定位,但是跟他相鄰的兄弟元素很好定位,這時候就可以通過兄弟元素,找到同一父級元素下的子元素
如上定位書架:
#兄弟關系fromParent brother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("圖書"))' driver.find_element_by_android_uiautomator(brother).click()