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

server/2024/10/9 15:16:15/

文章目录

  • 前言
  • 一、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)分类:

  • 隐式等待
  • 显式等待

总结


http://www.ppmy.cn/server/48923.html

相关文章

Django分页

1、在视图函数文件中引入‘分页器’ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2、给原来的罗列信息函数,添加分页功能,即按照页码,只返回部分信息。 login_required def article_list(request):article…

界面控件DevExpress WinForms垂直属性网格组件 - 拥有更灵活的UI选择(一)

DevExpress WinForms垂直&属性网格组件旨在提供UI灵活性,它允许用户显示数据集中的单个行或在其90度倒置网格容器中显示多行数据集。另外,用户可以把它用作一个属性网格,就像在Visual Studio IDE中那样。 P.S:DevExpress Win…

【网络安全】跨站脚本攻击漏洞—HTML前端基础

目录 一、HTML概述 1.1 head部分 1.2 body部分 1.3 HTML特殊符号 二、JavaScript概述 2.1 HTML中JavaScript的存在方式 2.2 DOM操作 2.3 BOM操作 跨站脚本攻击(Cross-site scripting,通常缩写为XSS)是一种常见的网络安全漏洞&#xff…

HTML静态网页成品作业(HTML+CSS)—— 家乡山西介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有6个页面。 二、作品演示 三、代…

使用CSS、JavaScript、jQuery三种方式实现手风琴效果

手风琴效果有不少,王者荣耀官网(源网址 https://pvp.qq.com/raiders/ )有一处周免英雄,使用的就是手风琴效果,如图所示。 我试着用css、js、jQuery三种方式实现了这种效果,最终效果差不多,美中不…

万界星空科技定制化MES系统,实现数字化生产

一、MES生产管理系统强调三个方面: 1、MES是对整个车间制造过程的优化,而不是单一的解决某个生产瓶颈。 2、MES必须提供实时收集生产过程中数据的功能,并作出相应的分析和处理。 3、MES需要与计划层和控制层进行信息交互,通过企业…

VMware Workerstation开启虚拟机后,产生乱码名称日志文件

问题情况 如下图所示,我的虚拟机版本是16.1.2版本,每次在启动虚拟机之后,D盘目录下都会产生一个如图下所示的乱码名称文件。同时,虚拟机文件目录也是杂乱不堪,没有按照一台虚拟机对应一个文件夹的形式存在。 问题处理…

白酒:茅台镇白酒的品鉴课程与文化学习

茅台镇,这个位于中国贵州省的美丽小镇,以其与众不同的自然环境和杰出的酿酒工艺,成为了世界著名的白酒产区。作为茅台镇的杰出代表,云仓酒庄豪迈白酒不仅在国内享有盛誉,在国际市场上也备受瞩目。为了更好地推广中国白…