Appium安卓端定位元素

安卓端定位元素

根据ID

在Selenium Web自动化教程里,我们说过,如果能根据ID选择定位元素,最好根据ID,因为通常来说ID是唯一的,所以根据ID选择 效率高。

在安卓应用自动化的时候,同样可以根据ID查找。

但是这个ID ,是安卓应用元素的 resource-id 属性

使用如下代码

driver.find_element_by_id('expand_search')

根据CLASS NAME

安卓界面元素的 class属性 其实就是根据元素的类型,类似web里面的tagname, 所以通常不是唯一的。

通常,我们根据class 属性来选择元素, 是要选择多个而不是一个。

当然如果你确定 要查找的 界面元素的类型 在当前界面中只有一个,就可以根据class 来唯一选择。

使用如下代码

driver.find_elements_by_class_name('android.widget.TextView')

 

根据ACCESSIBILITY ID

元素的 content-desc 属性是用来描述该元素的作用的。

如果要查询的界面元素有 content-desc属性,我们可以通过它来定位选择元素。

使用如下代码

driver.find_element_by_accessibility_id('找人')

Xpath

Appium 也支持通过 Xpath选择元素。

但是其可靠性和性能不如 Selenium Web自动化。因为Web自动化对Xpath的支持是由浏览器实现的,而Appium Xpath的支持是 Appium Server实现的。

毕竟,浏览器产品的成熟度比Appium要高很多。

当然,Xpath是标准语法,所以这里表达式的语法规则和 以前学习的Selenium里面Xpath的语法是一样的,比如

driver.find_element_by_xpath('//ele1/ele2[@attr="value"]')

安卓 UIAutomator 

就是通过 text 属性 和 className的属性 两个条件 来定位元素 

code = 'new UiSelector().text("热门").className("android.widget.TextView")'
ele = driver.find_element_by_android_uiautomator(code)
ele.click()

 

 

 父子关系childSelector

UiSelector 的 childSelector 可以选择后代元素,比如

code = 'new UiSelector().resourceId("tv.danmaku.bili:id/recycler_view").childSelector(new UiSelector().className("android.widget.TextView"))'

ele = driver.find_element_by_android_uiautomator(code)

注意: childSelector后面的引号要框住整个 子 uiSelector 的表达式

目前有个bug:只能找到符合条件的第一个元素,参考appium 在github上的 issues:

https://github.com/appium/java-client/issues/150


# son = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'
# driver.find_element_by_android_uiautomator(son).click()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值