appium定位app上的元素方式 在前面文章中有介绍,(通过UIautomator工具查看app元素)
appium定位app上的元素,可以通过id,name,class这些属性定位到
1、id 定位,是需要找到元素的 resource-id属性
格式:driver.find_element_by_id("resource-id属性值")
2、name 定位,是要找到元素的 text属性
格式:driver.find_element_by_name("text属性值")
3、class 定位,是要找到元素的class属性
格式:driver.find_element_by_class_name("class属性值")
4、accessibility_id 定位,是要找到元素的content-desc属性
格式:driver.find_element_by_accessibility_id("content-desc属性值")
5、xpath 定位
这儿以秀动app为例,定位风格推荐的“更多”按钮
①如果元素text是唯一的,可以通过text文本定位
格式: //*[@text='text文本属性值']
eg:driver.find_element_by_xpath("//*[@text='更多']").click()
②如果元素id是唯一的,可以通过id属性定位
格式://*[@resource-id='resource-id属性值']
eg:driver.find_element_by_xpath("//*[@resource-id='com.showstartfans.activity:id/tv_style_more']").click()
可以联合@resource-id属性和@text文本属性定位
driver.find_element_by_xpath("//*[@resource-id='com.showstartfans.activity:id/tv_style_more'][@text='更多']").click()
③如果class属性唯一,也可以通过class属性定位(有两种方法)
a、第一种: 格式: //class属性值
eg:driver.find_element_by_xpath("//android.widget.TextView").click()
b、第二种: 格式: //*[@class='class属性值']
eg:driver.find_element_by_xpath("//*[@class='android.widget.TextView']").click()
④通过content-desc属性定位
格式: //*[@content-desc='desc的属性值']
eg:driver.find_element_by_xpath("//*[@content-desc='XXX']").click()
⑤contains 模糊定位
contains是模糊匹配的定位方法,对于一个元素的id或者text不是固定的,但有一部分是固定的,这种就可以模糊匹配
格式://*[contains(@content-desc, ‘属性值’)]
//*[contains(@resource-id, ‘属性值’)]
//*[contains(@clsss, ‘属性值’)]
⑥组合定位
如果一个元素有2个属性,通过xpath也可以同时匹配2个属性,text, resource-id,class ,index,content-desc这些属性都能任意组合定位
# id和class属性 定位“更多”
id_class = '//android.widget.TextView[@resource-id="com.showstartfans.activity:id/tv_style_more"]'
driver.find_element_by_xpath(id_class).click()
time.sleep(3)
driver.back() # text和index属性 定位注册
desc_class = '//*[@text="注册账号" and @index="5"]'
driver.find_element_by_xpath(desc_class).click()
time.sleep(3) # class和text属性 定位输入手机号
class_text = '//android.widget.EditText[@text="请输入手机号码"]'
driver.find_element_by_xpath(class_text).send_keys("")
time.sleep(3) # class和desc 定位
id_desc = '//*[contains(@resource-id, "xxx") and @content-desc="xxx1"]'
driver.find_element_by_xpath(id_desc).click()
注意事项:
1、如果元素的resource-id,text,class,content-desc属性值为空,那么就不能通过该相关方式定位
2、一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了,非必要条件下,建议不使用class属性定位
3、appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了