前言:
定位元素:Appium有两种方式
1.Appium Inspector
2.uiautomatorviewer
一、Appium Inspector
1、设置 Android Settings
2、启动 Appium
3、启动Inspector
4、会遇到的异常:
a.每次启动都会给你手机上重新安装一次应用
b.不能用鼠标指定某个元素
c.不能重复刷新,页面实时更新差
一般不建议使用这个元素定位工具。
二、uiautomatorviewer
1、下载uiautomatorviewer
下载安装好SDK后,其实自带了uiautomatorviewer,在tools工具下:
2、启动uiautomatorviewer
双击uiautomatorviewer,并点击左上角的手机ico,刷新
3、可以根据鼠标在视图指定元素
a.左边为界面视图
b.右上边是元素菜单树
c.右下边是每个元素的属性
4、webdriver提供的11种元素定位方法
可以再pycharm上输入driver.find_element_by自动匹配出来
三、通过属性定位元素
这里使用uiautomatorviewer获取元素,通过id,name.class属性定位
1、id定位
格式:driver.find_element_by_id("resource-id")
driver.find_element_by_id("com.hundsun.stockwinner.grzq:id/ninecase")
2、name定位
格式:driver.find_element_by_name("text")
driver.find_element_by_name("系统设置")
这里出现乱码,还有部分元素name是会变的。所以name 定位元素不准确
3、class定位
格式:driver.find_element_by_class_name("class属性")
driver.find_element_by_class_name("android.widget.Button")
class元素不是唯一,所以单独以class定位也是不准确的。
上面为元素的定位。
三、通过Xpath来定位
1、有id和name的情况
a.可以直接通过上面的元素定位法来定位 driver.find_element_by_id("resource-id")。如果有id或name不唯一,可以通过加下标[1][2]来定位。如:
driver.find_element_by_id('com.wlqq:id/title_left_btn')[1]
b.可通过xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])。如果同样有id或name不唯一,也可通过加下标[1][2]来定位。如:
xpath=(//android.widget.TextView[@resource-id="com.wlqq:id/title_left_btn"])[1]
下标表示的是同类的第几个,不是前面位置的数字。坐标前用括号括起来。
2、没有id和name的情况
a.绝对路径:
例子:
要定位ImageButton[600,50][720,150] 这里有七级,绝对路径需从第一级一级一级找。
xpath= //android.widget.LinearLayout
/android.widget.FrameLayout
/android.widget.LinearLayout
/android.widget.RelativeLayout
/android.widget.RelativeLayout
/android.widget.LinearLayout[2]
/android.widget.ImageButton
b.相对路径:
相对路径可以通过距离 需要定位的位置 最近并且很容易准确定位的控件 来参照。一般用text为不变的或唯一值 id。
兄弟关系:
preceding-sibling:: 找到当前节点前面节点 也就是哥哥节点,following-sibling::找当前节点后面节点 也就是弟弟节点
父子关系:
parent:: 或 ..
例子:
通过TextView:钱包,当做轴点,参照节点。兄弟关系:
xpath=//android.widget.TextView[@text="钱包"]
/following-sibling::android.widget.LinearLayout
/android.widget.ImageButton
父子关系:
xpath=//android.widget.TextView[@text="钱包"]
/parent::android.widget.RelativeLayout
/android.widget.LinearLayout[2]
/android.widget.ImageButton
或
xpath=//android.widget.TextView[@text="钱包"]
/..
/android.widget.LinearLayout[2]
/android.widget.ImageButton