Appium+python定位方式

介绍appium 几种简单的定位方式

1、id定位
格式:driver.find_element_by_id("这里是resource-id")
driver.find_element_by_id("com.taobao.taobao:id/home_searchedit")
2、name定位
如上图的定位,就可以通过name来定位
格式:driver.find_element_by_name("这里是text")
driver.find_element_by_name("搭配新宠不能缺")
注:appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了**
(如果text属性为空,那就不能通过name属性定位了)
3、class定位
格式:driver.find_element_by_class_name("class属性")
driver.find_element_by_class_name("android.widget.EditText")
(注:一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了)
4、accessibility_id定位就是通过UI Automator工具查看的content-desc属性
(当然content-desc属性为空,就不能通过这个属性定位了,这里只是举个例子)
看到content-desc属性有值,就可以通过accessibility_id来定位了

格式:driver.find_element_by_accessibility_id(“content-desc的值”)

driver.find_element_by_accessibility_id(“xxx”)

(注:一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了)
除了上面的这几个通过属性定位的,复杂一点的还可以通过xpath和AndroidUiAutomator来定位

5、list定位,即列表定位。driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")[0].click()。
说明:有些列表页面页面没有id属性,有class属性,但class属性不唯一。或者有id属性,但是列表的id属性都一样。这个时候可以采用list定位,取id相同或class相同的,定位一组元素,再通过下标取出元素,便可定位到想取出的元素。
单数定位:find_element 为定位单数
复数定位:find_elements 为定位复数
例子:
searchs = driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")
print(searchs) # 打印list
print(type(searchs))
该定位到为list类型
定位一组之后,如果要点击该元素,那就先从list里面通过下标索引取出元素对象,再click就可以了。下标索引是从0开始。
# list定位
driver.find_elements_by_id("com.baidu.yuedu:id/tab_search")[0].click()

6、xpath定位
appium 1.5版本后name定位方式无法使用,可使用xpath代替
appium中xpath语法://*[@text='页面text文本']
例子:
driver.find_element_by_xpath("//*[@text='小说']").click()
若一个界面的text值不唯一呢?
xpath语法里面*是代表匹配任意的值,在selenium里面*是匹配任意标签,appium里的*是匹配任意class名称,如果几个文本的class属性不一样,就可以通过以下组合:

//android.widget.TextView[@text='小说']

7、模拟手势点击坐标

原因:定位元素确实无法定位到。可使用坐标定位,
tap为模拟手指点击坐标
driver.tap([(374, 831), (654, 906)], 500)

posted @ 2018-07-09 22:32  拉努斯石  阅读(1351)  评论(0编辑  收藏  举报