App自动化测试——元素定位操作 API

元素定位操作 API

学习目标

  1. 能够分别使用 id、class、xpath 定位某一个元素
  2. 能够分别使用 id、class、xpath 定位某一组元素

一. 元素定位操作 API

应用场景
计算机不像人一样 ”聪明“,我们需要通过元素定位来获取元素,才能让计算机帮我们 ”操作“ 这个元素。

步骤

  1. 打开 uiautomatorviewer 工具
  2. 打开模拟器或真机
  3. 通过 uiautomatorviewer 工具获取想要进行操作的元素的 Node Detail 信息
  4. 通过元素定位 API 进行定位
  5. 对元素进行相关操作

注意点
元素的定位基于当前屏幕范围内展示的可见元素。

1.1 定位一个元素【掌握】

应用场景
想要对按钮进行点击,想要对输入框进行输入,想要获取文本框的内容,定位元素是自动化操作必须要使用的方法。只有获取元素之后,才能对这个元素进行操作。

方法名

# 通过id定位一个元素
# 参数:
# id_value:元素的resource-id属性值
# 返回值:
# 定位到的单个元素
driver.find_element_by_id(id_value)
# 通过class_name定位一个元素
# 参数:
# class_value:元素的class属性值
# 返回值:
# 定位到的单个元素
driver.find_element_by_class_name(class_value)
# 通过xpath定位一个元素
# 参数:
# xpath_value:定位元素的xpath表达式
# 返回值:
# 定位到的单个元素
driver.find_element_by_xpath(xpath_value)

示例
通过 id 的形式,定位 ”放大镜“ 按钮,并点击
通过 class 的形式,定位 ”输入框“,输入 ”hello“
通过 xpath 的形式,定位 ”返回“ 按钮,并点击

关键代码

driver.find_element_by_id("com.android.settings:id/search").click()
driver.find_element_by_class_name("android.widget.EditText").send_keys("hello")
driver.find_element_by_xpath("//*[@content-desc='收起']").click()

小结

  1. find_element_by_id 方法中传入的是 Node Detail 信息中的 resource-id
  2. find_element_by_class_name 方法中传入的是 Node Detail 信息中的 class
  3. find_element_by_xpath 方法中传入的是 Node Detail 信息中的 xpath表达式

注意点
如果很多元素的 “特征” 相同,使用 find_element_by_xxx 的方法会找到第一个

1.2 定位一组元素【掌握】

应用场景
和定位一个元素相同,但如果想要批量的获取某个相同特征的元素,使用定位一组元素的方式更加方便。

方法名

# 通过id定位一组元素
# 参数:
# id_value:元素的resource-id属性值
# 返回值:
# 列表,定位到的所有符合调价你的元素
driver.find_elements_by_id(id_value)
# 通过class_name定位一组元素
# 参数:
# class_value:元素的class属性值
# 返回值:
# 列表,定位到的所有符合调价你的元素
driver.find_elements_by_class_name(class_value)
# 通过xpath定位一组元素
# 参数:
# xpath_value:定位元素的xpath表达式
# 返回值:
# 列表,定位到的所有符合调价你的元素
driver.find_elements_by_xpath(xpath_value)

示例
通过 id 的形式,获取所有 resource-id 为 ”com.android.settings:id/title“ 的元素,并打印其文字内容
通过 class_name 的形式,获取所有class 为 ”android.widget.TextView“ 的元素,并打印其文字内容
通过 xpath 的形式,获取所有包含 ”设“ 的元素,并打印其文字内容

关键代码

titles = driver.find_elements_by_id("com.android.settings:id/title")
for title in titles:
	print(title.text)
text_views = driver.find_element_by_class_name("android.widget.TextView")
for text_view in text_views:
	print(text_view.text)
elements = driver.find_element_by_xpath("//*[contains(@text,'设')]")
for element in elements:
	print(element.text)

1.3 定位元素的注意点【了解】

应用场景
了解这些注意点可以以后在出错误的时候,更快速的定位问题原因。

示例
使用 find_element_by_xx 或 find_elements_by_xx 的方法,分别传入一个没有的 ”特征“ 会是什么结果呢?

核心代码

driver.find_element_by_id("xxx")
driver.find_elements_by_id("xxx")

小结

  1. 如果使用 find_element_by_xx 方法,如果传入一个没有的特征,会报NoSuchElementException
    的错误。
  2. 如果使用 find_elements_by_xx 方法,如果传入一个没有的特征,不会报错,会返回一个空列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值