【APP移动端自动化测试】第三节.UIAutomatorViewer元素定位API操作

作者 : admin 本文共4472个字,预计阅读时间需要12分钟 发布时间: 2024-06-13 共1人阅读

文章目录

  • 前言
  • 一、UIAutomatorViewer的介绍
  • 二、元素定位API操作
  •       2.1 定位一个元素
  •       2.2 定位一组元素
  •       2.3 定位元素注意点
  •       2.4 元素等待的概述
  •       2.5 隐式等待
  •       2.6 显示等待
  •       2.7 隐式等待和显示等待的选择
  • 总结

前言


一、UIAutomatorViewer的介绍

(1)应用场景

定位元素的时候必须根据元素的相关特征来进行定位,而UIAutomatorViewer就是用来获取元素特征的。

(2)简介

UlAutomatorViewer用来扫描和分析Android应用程序的UI控件的工具。

(3)使用步骤

1.进入SDK目录下的目录

  • mac在tools/bin目录下,打开uiautomatorviewero
  • windows在 tools目录下,打开uiautomatorviewer.bat

2.电脑连接真机或打开android模拟器

3.启动待测试app

4.点击uiautomatorviewer的左上角Device Screenshot (从左数第二个按钮)

5.点击希望查看的控件

6.查看右下角Node Detail相关信息


(4)示例

查看《设置》应用程序右上角”放大镜”按钮的”resource-id”.

实现步骤:

1.打开uiautomatorviewer

2.打开android模拟器

3.启动《设置》应用程序

4.点击Device Screenshot按钮

5.点击”放大镜”按钮

6.查看Node Detail中的”resource-id”信息


注意点:
uiautomatorviewer注意点

1.命令行窗口不要关闭

2.如果uiautomatorviewer 闪退

      更换jdk为1.8

3.点击第二个按钮的时候报错

      重启adb

  •           adb kill-server
  •           adb start-server

二、元素定位API操作

(1)应用场景

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

(2)步骤

1.打开uiautomatorviewer工具

2.打开模拟器或真机

3.通过uiautomatorviewer工具获取想要进行操作的元素的Node Detail信息

4.通过元素定位API进行定位

5.对元素进行相关操作

(3)注意点

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


2.1 定位一个元素

(1)应用场景

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

(2)方法名

#通过id定位一个元素

#参数:

#id_value:元素的resource-id属性值

#返回值:

#定位到的单个元素

driver.find_element_by_id(id_value)


#通过class_name定位一个元素

#参数:

#class_value:元素的c1ass属性值

#返回值:

#定位到的单个元素

driver.find_e1ement_by_class_name(class_value)


#通过xpath定位一个元素

#参数:

#xpath_value:定位元素的xpath表达式

#返回值:

#定位到的单个元素

driver.find_element_by_xpath(xpath_value)


(3)示例

1.通过id 的形式,定位”放大镜”按钮,并点击

2.通过class 的形式,定位”输入框””,输入“hello”

3.通过xpath 的形式,定位”返回”按钮,并点击


关键代码:

1.driver.find_element_by_id(“com.android.settings:id/search”).click()

2.driver.find_element_by_class_name(” android.widget.EditText”).send_keys( “hell

o”)

3.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 bv xpath方法中传入的是Node Detail信息中的xpath表达式


2.2 定位一组元素

(1)应用场景

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

(2)方法名

#通过id定位一个元素

#参数:

#id_value:元素的resource-id属性值

#返回值:

#列表,定位到的所有符合调价你的元素

driver.find_elements_by_id(id_value)


#通过class_name定位一个元素

#参数:

#class_value:元素的c1ass属性值

#返回值:

#列表,定位到的所有符合调价你的元素

driver.find_elements_by_class_name(class_value)


#通过xpath定位一个元素

#参数:

#xpath_value:定位元素的xpath表达式

#返回值:

#列表,定位到的所有符合调价你的元素

driver.find_elements_by_xpath(xpath_value)


(3)示例

1.通过id 的形式,获取所有resource-id为”com.android.settings:id/title”的元素,并打印其文字内容

2.通过class_name的形式,获取所有class为 “android.widget.TextView”的元素,并打印其文字内容

3.通过xpath的形式,获取所有包含“设”的元素,并打印其文字内容


关键代码:

1.通过id 的形式

titles = driver.find_elemets_by_id(“com.android.settings:id/title”)

for title in titles:

print(title.text)

2.通过class_name 的形式

text_views = driver.find_element_by_class_name(“android.widget.Textview”)

for text_view in text_views:

print(text_view.text)

3.通过xpath 的形式

elements = driver.find_element_by_xpath(“//*[contains(@text, ‘设’)]”)

for element in elements:

print(element.text)


2.3 定位元素注意点

(1)应用场景

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

(2)示例

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

(3)核心代码

driver.find_element_by_id(“xxx”)

driver.find_elements_by_id(“xxx””)

(4)小结

1.如果使用find_element_by_xx方法,如果传入一个没有的特征,会报NoSuchElementException的错误。

2.如果使用find_elements_by_xx方法,如果传入一个没有的特征,不会报错,会返回一个空列表


2.4 元素等待的概述

(1)应用场景

可能由于一些原因,我们想找的元素并没有立刻出来,此时如果直接定位可能会报错,

比如以下原因:

1.由于网络速度原因

2.服务器处理请求原因

3.电脑配置原因

(2)概念

WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程

元素等待一共分为两种类型

1.显式等待

2.隐身等待


2.5 隐式等待

(1)应用场景

针对所有定位元素的超时时间设置为同一个值的时候

(2)概念

等待元素加载指定的时长,超出时长抛出NoSuchElementException异常

(3)步骤

在获取driver对象后,使用driver调用implicitly_wait方法即可

(4)示例

在5秒钟内,在《设置》程序中的“返回”按钮,如果找到则点击。如果找不到则观察对应错误信息。

(5)核心代码

from selenium.webdriver.support.wait import webDriverwait

#—–

#启动应用参数

#—–

driver.implicitly_wait(10)

search_button = driver.find_element_by_xpath(“//*[contains(@content-desc, ‘收起’)]”)

search_button.c1ick()


方法参数解释

#参数:

#timeout:超时的时长,单位:秒

implicitly_wait(timeout)


2.6 显示等待

(1)应用场景

针对所有定位元素的超时时间设置为不同的值的时候

(2)概念

等待元素加载指定的时长,超出时长抛出TimeoutException异常

(3)步骤

1.导包

2.创建WebDriverWait对象

3.调用WebDriverWait对象的until方法

(4)示例

在5秒钟内,在《设置》程序中的“返回”按钮,如果找到则点击。如果找不到则观察对应错误信息。

(5)核心代码

from selenium.webdriver.support.wait import webDriverwait

#—–

#启动应用参数

#—–

#创建webDriverwait对象

wait = webDriverwait(driver,5,po11_frequency=1)

#获取元素并设置超时时间和频率

search_button m wait.unti1(1ambda x: x.find_element_by_xpath(“//*[contains(@content-desc,”收起”)]”))

#点击搜索按钮

search_button.clicko


方法参数解释

#参数:

#    driver:驱动对象

#timeout:超时的时长,单位:秒

#poll_frequency:检测间隔时间,默认为0.5秒

#返回值:

#webDriverwait对象

webDriverwait(driver,timeout,po11_frequency=0. 5)

#参数:

#method: lambda查找元素表达式

#返回值:

#定位到的元素,如果没有定位到会抛出TimeoutException异常

wait.until(method)


2.7 隐式等待和显示等待的选择

总结:

(1)概念

找元素的时候,通过一个时间的设置,进行等待元素,等待元素出来之后,再来定位,放置报错

(2)应用场景

如果某个元素没有及时出来,那么我们就应该使用元素等待

(3)分类:

  • 隐式等待
  • 显式等待

总结

本站无任何商业行为
个人在线分享 » 【APP移动端自动化测试】第三节.UIAutomatorViewer元素定位API操作
E-->