appium第二章:元素定位

章节概要

app自动化测试过程中最重要一个环节就是元素定位,只有准确定位到了元素才能进行相关元素的操作,如输入、点击、拖拽、滑动等。appium提供了许多元素定位的方法,如id定位、name定位、class定位、层级定位等等… 接下来将会给大家来实践运用这些定位技巧

Uiautomator工具的使用

该工具是Android自带的,安装好Android,直接调用。
appium第二章:元素定位
1.开启真机(或模拟器)的USB调式模式后连接电脑
2.打开设备上的App界面
3.启动UI Automatorviewer
4.获取对应页面的元素(多设备连接时要选择需要获取元素的设备)
appium第二章:元素定位

一、id定位

id定位是根据元素的resource-id属性来进行定位
Appium中可以使用 find_element_by_id() 进行执行
例如:cancelBtn=driver.find_element_by_id(‘android:id/button2’)

二、name定位

根据name进行定位,就是text属性
Appium中可以使用 find_element_by_name() 进行执行
例如:driver.find_element_by_name(‘登录’)

三、classname定位

classname定位是根据元素类型来进行定位,就是class属性
Appium中可以使用find_element_by_class_name进行执行
例如:driver.find_element_by_class_name(‘android.widget.Button’)

四、相对定位

相对定位是先找到该元素的有对应属性的父元素节点,然后基于父元素进行元素定位。
例如:
appium第二章:元素定位

五、xpath定位

xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少。通常使用xpath相对路径和属性定位
xpath路径表达式:

表达式 描述
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
选取当前节点的父节点。
@ 选取属性。
通配符 描述
* 匹配任何元素节点。
@* 匹配任何属性节点。
[ ] 匹配一些元素属性的节点

例如:
“//*[@class=‘android.widget.RelativeLayout’ and @index =’%s’]/android.widget.TextView”

driver.find_element_by_xpath(’//*[@class=“android.widget.FrameLayout” and @index=“2”]/android.view.View’)
xpath详解:http://www.w3school.com.cn/xpath/xpath_syntax.asp

六、List定位

前面我们提到相同的classname属性值元素无法区分定位,那么在本节课将使用List定位来解决这个问题。List定位首先是使用find_elements_by_XX获取一组相同的class属性的元素,然后使用数组下标来区分标记不同元素进行相关操作(这个下标相当于index坐标的值
例如:

  • driver.find_elements_by_id(‘com.tencent.mm:id/d9u’)[1]
  • driver.find_elements_by_id(‘android:id/title’)[0]