相对定位android,[AP_09] Appium元素定位02:name| classname| xpath| List| 相对定位

一、Appium元素定位的其他方式

1. name定位

使用:find_element_by_name('text属性值')

对于Android,根据name进行定位,即text属性

由于text稳定性不是很好,有的元素不能识别出text属性值,Appium1.5开始废弃了该方法

d31fde6e37ba

未识别出text属性值

2. classname定位

使用:find_element_by_class_name('class类型')

classname定位是根据元素类型进行定位,但实际情况中很多元素的classname都是相同的,此时定位只会识别到第一个classname,一定程度上限制了classname定位的应用

如:某些APP登录界面中的用户名和密码输入框的class都为 android.widget.EditText

d31fde6e37ba

3. 相对定位

相对定位:先找到该元素有对应属性的父元素节点,然后基于父元素进行元素定位

by_relative.py

from capability import driver

# 定位【注册】元素

driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()

# 定位【添加头像】的父元素

root_element=driver.find_element_by_id('com.tal.kaoyan:id/activity_register_parentlayout')

# 定位到【添加头像】

root_element.find_element_by_class_name('android.widget.ImageView').click()

d31fde6e37ba

4. xpath定位

xpath定位:一种路径定位方式,依赖元素绝对路径or相关属性定位,但绝对路径执行效率降低,建议采用相对路径和属性联合定位

xpath路径表达式:

表达式

描述

/

从根节点选取

//

从当前节点选择文档中的节点

nodename

选取对应节点的所有子节点

.

选取当前节点

..

选取当前节点的父节点

@

选取属性

xpath匹配符:

通配符

描述

*

匹配任何元素节点

@*

匹配任何属性节点

node()

匹配任何类型的节点

案例:

通过xpath定位识别进行登录APP

by_xpath.py

from capability import driver

# 根据控件类型的属性定位

username=driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]')

username.send_keys('xxxxx')

# 联合多个属性定位

passsword=driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]')

passsword.send_keys('yyyyy')

# 根据具有唯一性的控件类型定位

lgBtn=driver.find_element_by_xpath('//android.widget.Button')

lgBtn.click()

# driver.find_element_by_xpath('//*[@class="android.widget.Button"]').click()

5. List定位

List定位:使用 find_elements_by_xxx 获取一组相同的class属性的元素,然后使用数组下标来区分标记不同元素来进行相关操作。通过List定位,可以解决其前相同的classname属性值元素无法定位区分的问题

测试案例:

在新用户注册界面,点击添加头像按钮,选择指定的图片作为头像来保存

by_list.py

from capability import driver

# 点击【注册】按钮

driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()

# 定位【添加头像】按钮对应的元素

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_userheader').click()

# 定位待上传图片集(此处任一备选图片对应的id和class都一致),用数组接收

images=driver.find_elements_by_id('com.tal.kaoyan:id/iv_picture')

# 通过数组下标定位指定位置的图片

images[7].click()

# 点击【完成】图片选择

driver.find_element_by_id('com.tal.kaoyan:id/picture_tv_ok').click()

# 点击【√】确定选择图片

driver.find_element_by_id('com.tal.kaoyan:id/menu_crop').click()

d31fde6e37ba

d31fde6e37ba

二、List综合案例:用户注册

场景描述:

(1)进入注册界面,设置头像

(2)输入注册信息:用户名、密码、邮箱

(3)提交注册

kaoyan_register.py

from capability import driver

import random

# 点击【注册】按钮

driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()

# 添加头像

# 定位【添加头像】按钮对应的元素

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_userheader').click()

# 定位待上传图片集(此处任一备选图片对应的id和class都一致),用数组接收

images=driver.find_elements_by_id('com.tal.kaoyan:id/iv_picture')

# 通过数组下标定位指定位置的图片

images[7].click()

# 点击【完成】图片选择

driver.find_element_by_id('com.tal.kaoyan:id/picture_tv_ok').click()

# 点击【√】确定选择图片

driver.find_element_by_id('com.tal.kaoyan:id/menu_crop').click()

# 填写用户信息

# 用户名

username='myyhm_'+str(random.randint(1000,9999))

print('username: %s' %username)

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_username_edittext').send_keys(username)

# 密码

password='abc'+str(random.randint(10000,99999))

print('password: %s' %password)

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_password_edittext').send_keys(password)

# Email

email='mydzyx_'+str(random.randint(100000,999999))+'@126.com'

print('email: %s' %email)

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_email_edittext').send_keys(email)

# 点击【立即注册】

driver.find_element_by_id('com.tal.kaoyan:id/activity_register_register_btn').click()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值