AI智能
改变未来

Appium元素定位方式之android_uiautomator定位


1. android_uiautomator定位

相当于使用 UiAutomator Api 去递归地搜索元素(Android 专属),可以说android uiautomator是终极定位方式,有的时候一些元素不能够很好的定位时,那么就需要采用android uiautomator去定位,他是一种非常强有力的定位方式,原理是通过android 自带的android uiautomator的类库去查找元素。appium对android 的uiautomator进行了封装,该方法的参数为UiSelector类定位元素的表达式:new UiSelector().属性(\’属性值\’),实例化一个UiSelector对象,然后通过实例接口调用。AndroidUIAutomator是一个强有力的元素定位方式,它是通过Android UIAutomator类库去找元素,可以选择resourceId、text、className、description作为传入的字符串。

1.1 android_uiautomator之text文本定位语法

  1.使用text文本定义

loc_text = \'new UiSelector().text(\"登录/注册\")\'driver.find_element_by_android_uiautomator(loc_text).click()

  2.uiautomator text模糊定位

文本比较长的时候,可以用textContains模糊匹配,通过text的部分信息就能够进行定位,我们直接看代码:

loc_text = \'new UiSelector().textContains(\"登录/注册\")\'driver.find_element_by_android_uiautomator(loc_text).click()

在上面的代码中我们只是将.text()的方法变成了.textContains(),在方法中传入模糊的数据就好。看到这里是否有人思考过一个问题,既然有类似的模糊寻找,那么有没有像正则表达式一样的查找呢?答案是肯定的,看我们下面的方法。

  3.textMatches 正则匹配查找

textMatches故名思义就是通过正则的来进行查找定位,也是通过text的属性来进行正则匹配,我们直接看代码:

loc_text = \'new UiSelector().textMatches(\"^登录/.*\")\'driver.find_element_by_android_uiautomator(loc_text).click()

  4.textStartsWith是以某个文本开头来匹配

new UiSelector().textStartsWith(\”以text文本开头\”)

loc_text = \'new UiSelector().textStartsWith(\"登录\")\'driver.find_element_by_android_uiautomator(loc_text).click()

1.2 android_uiautomator之resourceId定位

resourceId定位和appium封装好的id定位是一样的,只是这里将写法变成了uiautomator的写法而已。

  1.resourceId定位

oc_id = \'new UiSelector().resourceId(\" com.wm.dmall:id/net_image_view \")\'dri2562ver.find_element_by_android_uiautomator(loc_id).click()

通过上面的代码和之前的代码对比大家可能发现其实他们前面都是一样的,只是在定位的时候发生了一些变化,text变换成了resourceId即可,也就是页面对象属性的信息进行变更了,其他方法都是一样。

  2. resourceIDMatches 定位

通过id进行正则匹配定位

loc_id = \'new UiSelector().resourceIdMatches(\".+net_image_view \")\'driver.find_element_by_android_uiautomator(loc_id).click()

1.3 android_uiautomator之className定位

页面上的class属性一般不唯一,多半用在复数定位时候。比如通过class属性定位\’同意\’这个按钮下标就是1。

  1.className定位

# className复数定位loc_class = \'new UiSelector().className(\"android.widget.TextView\")\'driver.find_elements_by_android_uiautomator(loc_class)[1].click()

  2.uiautomator classNameMatches定位

通过className正则匹配进行定位:

loc_class = \'new UiSelector().classNameMatches (\".*widget.TextView\")\'driver.find_elements_by_android_uiautomator(loc_class)[1].click()

1.4 android_uiautomator之description定位

loc_id = \'new UiSelector().description(\"多点\")\'driver.find_element_by_android_uiautomator(loc_id).click()

1.5 android_uiautomator之组合定位

  1.id与text属性组合

id_text = \'resourceId(\"com.wm.dmall:id/funcTitle\").text(\"待支付\")\'driver.find_element_by_android_uiautomator(id_text).click()

  2.class与text属性组合

class_text = \'className(\"android.widget.TextView\").text(\"待支付\")\'driver.find_element_by_android_uiautomator(class_text).click()

  3.父子关系定位

son = \'resourceId(\"com.wm.dmall:id/container\").childSelector(text(\"我的\"))\'driver.find_element_by_android_uiautomator(son).click()

  4.兄弟定位fromParent

有时候父元素不好定位,但是跟他相邻的兄弟元素很好定位,这时候就可以通过兄弟元素,找到同一父级元素下的子元素。

brother = \'resourceId(\"com.wm.dmall:id/nav_item_laber_tv\").fromParent(text(\"我的\"))\'driver.find_element_by_android_uiautomator(brother).click()

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Appium元素定位方式之android_uiautomator定位