【APP移动端自动化测试】第四节.元素操作的API

文章目录

  • 前言
  • 一、点击&输入&清空操作
  •       1.1 点击元素
  •       1.2 输入&清空元素
  • 二、获取文本内容&位置&大小操作
  •       2.1 获取文本内容
  •       2.2 获取位置&大小
  • 三、根据属性名获取属性值操作
  • 四、滑动和拖拽操作
  •       4.1 _swipe
  •       4.2 _scroll
  •       4.3 darg_and_drop
  •       4.4 滑动和拖拽事件选择
  • 五、高级手势TouchAction
  •       5.1 轻敲操作
  •       5.2 按下&抬起操作
  • 六、等待&长按操作
  • 七、移动操作
  • 八、分辨率&截图操作
  • 九、获取和设置手机网络操作
  • 十、发送键到设备&操作通知栏操作
  • 总结


前言


一、点击&输入&清空操作

1.1 点击元素

(1)应用场景

需要点击某个按钮的时候使用

(2)方法名

#对element按钮进行点击操作

element.click()

(3)示例

1.打开《设置》

2.点击放大镜按钮

(4)核心代码

driver.find_element_by_id("com.android.settings:id/search").click()

1.2 输入&清空元素


(1)应用场景

需要对输入框进行输入或清空的时候使用

(2)方法名

#对element输入框进行输入操作

#参数:value:输入的内容

element.send_keys(value)

#对element输入框进行输入操作

element.clear()

(3)示例

1.打开《设置》

2.点击放大镜按钮

3.输入"hello"

4.暂停⒉秒

5.清空所有文本内容

6.暂停5秒

7.输入"你好"

(4)核心代码

#点击放大镜

driver.find_element_by_id("com.android.settings:id/search").click()

#输入hello

edit_text=driver.find_element_by_class_name("android.widget.EditText")

edit_text.send_keys("hello")

time. sleep(2)

#清空所有文本内容

edit_text.clear()

time. sleep(5)


二、获取文本内容&位置&大小操作

2.1 获取文本内容

(1)应用场景

需要获取按钮、文本框、输入框等控件的文本内容时使用

(2)方法名

#获取element控件的文本内容

#返回值:

#控件的文本内容

element.text

(3)示例

1.打开《设置》

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

(4)核心代码

titles = driver.find_elements_by_id("com.android.settings:id/title")

for title in titles:

print(title.text)


2.2 获取位置&大小

(1)应用场景

需要获取元素的位置和大小的时候使用

(2)方法名

#获取element控件的文本内容

#返回值:

#字典,x为元素的x坐标,y为元素的y坐标

element. location

#获取element的大小

#返回值:

#字典,width为宽度,height为告诉

element.size

(3)示例

1.打开《设置》

2.获取"放大镜”的位置和大小

(4)核心代码

search_button = driver.find_element_by_id("com.android.settings:id/search")

print(search_button . location)

print(search_button.size)


三、根据属性名获取属性值操作

(1)应用场景

根据特征定位到元素后,使元素的属性名获取对应的属性值

(2)方法名

#对element进行点击操作

#参数:

#value:要获取的属性名

#返回值:

#根据属性名得到的属性值

element.get_attribute(value) # value:元素的属性

(3)示例

1.打开《设置》

2.获取所有resource-id为“com.android.settings:id/title”的元素

3.使用get_attribute 获取这些元素的enabled、text、content-desc、resource-id、class的属性值

(4)核心代码

titles = driver.find_elements_by_id("com.android.settings:id/title")

for title in titles:

print(title.get_attribute("enab1ed"))

print(title.get_attribute("text")

print(title.get_attribute("name"))

print(title.get_attribute( "resourceId"))

print(title.get_attribute("className"))

注意点:
(1)value='text'返回text的属性值

(2)value=name'返回cpntent-desc / text属性值

(3)value='resourceld'返回resource-id属性值,只有API=>18才能支持

(4)value='resourceld'返回resource-id属性值,只有API=>18才能支持


四、滑动和拖拽操作

应用场景

我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是我们将要学习的滑动和拖拽事件

4.1 _swipe

(1)概念

从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动。

(2)方法名

#从一个坐标位置滑动到另一个坐标位置,只能是两个点之间的滑动

#参数:

#start_x:起点x轴坐标

#start_y:起点Y轴坐标

#end_x:终点x轴坐标

#end_y:终点Y轴坐标

#duration:滑动这个操作一共持续的时间长度,单位:ms

driver.swipe(start_x,start_y,end_x,end_y,duration=None)

(3)示例

示例1:
模拟手指从(100,2000),滑动到(100,1000)的位置

核心代码

driver.swipe(100,2000,100,1000)

示例2:
模拟手指从(100,2000),滑动到(100,100)的位置

核心代码

driver.swipe(100,2000,100,100)

示例3:

模拟手指从 (100,2000),滑动到(100,100)的位置,持续5秒

核心代码

driver.swipe(100,2000,100,100,5000)


小结

距离相同时,持续时间越长,惯性越小

持续时间相同时,手指滑动的距离越大,实际滑动的距离也就越大


4.2 _scroll

(1)概念

从一个元滑动到另一个元素,直到页面自动停止。

(2)方法名

#从一个元素滑动到另一个元素,直到页面自动停止

#参数:

#origin_el:滑动开始的元素

#destination_el:滑动结束的元素

driver.scroll(origin_e1,destination_e1)

(3)示例

将“存储”拖拽到“更多"

核心代码

save_button = driver.find_element_by_xpath("//*[@text='存储']")

more_button = driver.find_element_by_xpath("/ /*[@text='更多']")

driver.scroll(save_button,more_button)


小结:

不能设置持续时间,惯性很大


4.3 darg_and_drop

(1)概念

从一个玩素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置。

(2)方法名

# 从一个元素滑动到另一个元素,第二个元素替代第一个元素原本屏幕上的位置

#参数:

#origin_el:滑动开始的元素

#destination_el:滑动结束的元素

driver.drag_and_drop(origin_e1, destination_e1)

(3)示例

将“存储”拖拽到“更多"核心代码

核心代码

save_button = driver.find_element_by_xpath("//*[@text='存储']")

more_button = driver.find_element_by_xpath("/ /*[@text='更多']")

driver.drag_and_drop(save_button,more_button)


小结:
不能设置持续时间,没有惯性


4.4 滑动和拖拽事件选择

滑动和拖拽几非就是考虑是否有“惯性”,以及传递的参数是“元素”还是“坐标"。

可以分成以下四种情况:

  • 有“惯性”,传入“元素”
  •       scroll
  • 无“惯性”,传入“元素”
  •       drag_and_drop
  • 有“惯性”,传入“坐标”
  •       swipe,并且设置较短的duration时间
  • 无“惯性”,传入“坐标”
  •       swipe,并且设置较长的duration时间

五、高级手势TouchAction

(1)应用场景

TouchAction可以实现一些针对手势的操作,比如滑动、长按、拖动等。我们可以将这些基本手势组合成一个相对复杂的手势。

比如,我们解锁手机或者一些应用软件都有手势解锁的这种方式。

(2)使用步骤

1.创建TouchAction对象

2.通过为对象调用想执行的手势

3.通过perform()执行动作注意点

(3)注意点:

所有手势都要通过执行perform()函数才会运行。


5.1 轻敲操作

(1)应用场景

模拟手指对某个元素或坐标按下并快速抬起。比如,固定点击(100,100)的位置。

(2)方法名

#模拟手指对元素或坐标的轻敲操作

#参数:

#element:元素

#x∶x坐标

#y:y坐标

TouchAction(driver).tap(element=None,x=None,y=None).perform()

(3)示例

1.打开《设置》

2.轻敲“WLAN"核心代码

(4)核心代码

el = driver.find_element_by_xpath("//*[contains(@text, 'WLAN')]")

TouchAction(driver).tap(e1).perform


5.2 按下&抬起操作

(1)应用场景

模拟手指一直按下,模拟手指抬起。可以用来组合成轻敲或长按的操作

(2)方法名

#模拟手指对元素或坐标的按下操作

#参数:

#el:元素

#x︰x坐标

#y: y坐标

TouchAction(driver).press(el=None,x=None,y=None).perform()

#模拟手指对元素或坐标的抬起操作

TouchAction(driver).release().perform()

(3)示例

示例1:

使用坐标的形式点击WLAN (650,650),2秒后,按下(650,650)的位置

核心代码:

TouchAction(driver).press(x=650,y=650).perform()

time.sleep(2)

TouchAction(driver).press(x=650,y=650).perform()


示例2:

使用坐标的形式点击WLAN (650,650) ,2秒后,按下(650,650)的位置,并抬起

核心代码:

TouchAction(driver).press(x=650,y=650).perform()

time.sleep(2)

TouchAction(driver).press(x=650,y=650).release().perform()


六、等待&长按操作

等待操作:

(1)应用场景

模拟手指等待,比如按下后等待5秒之后再抬起。

(2)方法名

#模拟手指暂定操作

#参数:

#ms:暂停的毫秒数

TouchAction(driver).wait(ms=0).perform()

(3)示例

使用坐标的形式点击WLAN (650,650),2秒后,按下(650,650)的位置,暂停2秒,并抬起

(4)核心代码

TouchAction(driver).tap(x=650,y=650).perform()

time.sleep(2)

TouchAction(driver).press(x=650,y=650).wait(2000). release().perform()


长按操作:

(1)应用场景

模拟手指对元素或坐标的长按操作。比如,长按某个按钮弹出菜单。

(2)方法名

#模拟手指对元素或坐标的长按操作

#参数:

#el:元素

#x︰x坐标

#y: y坐标

#duration:长按时间,毫秒

TouchAction(driver).long_press(e1=None,x=None,y=None,duration=1000) . perform()

(3)示例

使用坐标的形式点击WLAN (650,650),2秒后,长按(650,650)的位置持续⒉秒

(4)核心代码

TouchAction(driver).tap(x=400,y=400).perform()

time.sleep(2)

TouchAction(driver).long_press(x=400,y=400,duration=2000) . release().perform()


七、移动操作

长按操作:

(1)应用场景

模拟手指移动操作,比如,手势解锁需要先按下,再移动。

(2)方法名

#模拟手指对元素或坐标的移动操作

#参数:

#el:元素

#x︰x坐标

#y: y坐标

#duration:长按时间,毫秒

TouchAction(driver).move_to(e1=None,x=None,y=None).perform()

(3)示例

在手势解锁中,画一个如下图的案例

包名界面名为com.android.settingsl.ChooseLockPattern

(4)核心代码


八、分辨率&截图操作

(1)应用场景

视频应用在使用流量看视频的时候,大部分都会提示用户正在是否继续播放。作为测试人员,我们可能需要用自动化的形式来判断是否有对应的提示。即,用流量的时候应该有提示,不用流量的时候应该没有提示。

(2)方法名

#获取手机网络

driver.network_connection

(3)示例

获取当前网络类型,并打印

(4)核心代码

def test3(self):
    """
    获取手机网络
    """
    print(self.driver.network_connection)

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

博瓦科技产品亮相湖北安博会啦!!!

6月12日,第二十三届2024中国(武汉)社会公共安全产品暨数字城市产业展览会(简称:湖北安博会)在武汉国际会展中心隆重开幕。作为行业内最具影响力的展会之一,此次盛会将汇聚来自全球的顶尖企业、专…

G6 - CycleGAN实战

🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/) 目录 理论知识CycleGAN能做什么 模型结构损失函数 模型效果总结与…

每天五分钟深度学习:逻辑回归算法完成m个样本的梯度下降

本文重点 上节课程我们学习了单样本逻辑回归算法的梯度下降,实际使用中我们肯定是m个样本的梯度下降,那么m个样本的如何完成梯度下降呢? m个样本的损失函数定义为: 我们定义第i个样本的dw、db为: dw和db为损失J对w和b的偏导数,因为m个样本的代价函数J是1到m个样本总损失…

适合各行各业在线预约的自定义小程序源码系统 前后端分离 带完整的安装代码包以及代搭建教程

系统概述 这款自定义小程序源码系统是为了适应不同行业的预约需求而设计的。它具有高度的灵活性和可扩展性,可以根据不同用户的需求进行定制化开发,满足各种复杂的业务场景。 系统的前端采用了先进的小程序技术,为用户提供了简洁、直观的操…

【Windows】Topaz Gigapixel AI(人工智能图片放大工具)软件介绍和安装教程

软件介绍 Topaz Gigapixel AI是一款由Topaz Labs开发的先进图像放大软件,利用人工智能(AI)技术来放大图像,同时保持或甚至增强图像的细节和清晰度。这款软件特别适用于需要高质量图像放大的摄影师、设计师以及其他视觉内容创作者…

【C++】模板及模板的特化

目录 一,模板 1,函数模板 什么是函数模板 函数模板原理 函数模板的实例化 推演(隐式)实例化 显示实例化 模板的参数的匹配原则 2,类模板 什么是类模板 类模板的实例化 二,模板的特化 1,类模板的特化 全特化…

YOLOv10在RK3588上的测试(进行中...)

1.代码源 国内镜像站在gitcode。这个镜像站也基本上包含了github上常用项目的镜像。然后它的主发布源在这里: GitCode - 全球开发者的开源社区,开源代码托管平台 yolov10是清华主导做的... 然后,在维护列表里看到了这个: 2024年05月31日&am…

【React】配置别名路径@

别名路径配置 1. 路径解析配置(webpack) CRA本身把webpack配置包装到了黑盒里无法直接修改,需要借助一个插件 - craco步骤 安装craco npm i -D craco/craco项目根目录下创建配置文件 craco.config.js配置文件中添加路径解析配置 const pa…

智慧检务大数据平台解决方案

1.1. 政务目标分析 1.1.1. 业务功能分析 为履行检察职能,人民检察院需开展职务犯罪查办和预防、刑事诉讼监督、民事行政监督、检务支持、内部管理与办公、检察队伍管理、检务保障支持等工作,分为 7 大类业务,主要功能如下: 1、…

白嫖Cloudflare Workers 搭建 Docker Hub镜像加速服务

简介 基于Cloudflare Workers 搭建 Docker Hub镜像加速服务。 首先要注册一个Cloudflare账号。 Cloudflare账号下域名的一级域名,推荐万网注册个top域名,再转移到Cloudflare,很便宜的。 注意 Worker 每天每免费账号有次数限制,…

PFA进口聚四氟乙烯量筒不易碎塑料量具

PFA量筒:也叫特氟龙量筒、耐腐蚀性量筒;低溶出与析出,主要用于生物医药、医药研发、新材料、痕量分析、同位素检测,ICP-MS/OES/AAS分析等实验。 常用规格:5ml、10ml、25ml、30ml、50ml、100ml、200ml、250ml、500ml、1000ml、2000ml等。 产品特性&#x…

【6】第一个Java程序:Hello World

一、引言 Java,作为一种广泛使用的编程语言,其强大的跨平台能力和丰富的库函数使其成为开发者的首选。对于初学者来说,编写并运行第一个Java程序是一个令人兴奋的时刻。本文将指导你使用Eclipse这一流行的集成开发环境(IDE&#…

Vue基础面试题(二)

文章目录 1.Vue 单页应用与多页应用的区别2.Vue template 到 render 的过程3. Vue data 中某一个属性的值发生改变后,视图会立即同步执行重新渲染吗?4.Vue的优点5.vue如何监听对象或者数组某个属性的变化6.Vue模版编译原理7. 对SSR的理解8.Vue的性能优化…

实验五 网络中的树

文章目录 5.1 网络中的树第一关 认识树相关知识编程要求代码文件 第2关 根节点的二阶邻居求解方法相关知识编程要求代码文件 第3关 根节点的n阶邻居求解方法相关知识 5.2 权值矩阵与环(无向网络)第1关 无向网络的权值矩阵相关知识编程要求代码文件 第2关…

【机器学习】神经网络与深度学习:探索智能计算的前沿

前沿 神经网络:模拟人类神经系统的计算模型 基本概念 神经网络,又称人工神经网络(ANN, Artificial Neural Network),是一种模拟人类神经系统结构和功能的计算模型。它由大量神经元(节点)相互连…

docker环境中配置phpstorm php xdebug调试工具

本文介绍通过docker compose的使用方式 第一步:在php镜像中安装phpxdebug扩展,比如php7.4对应的是xdebug3.1.6 第二步:设置项目中的docker-compose.yml docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址&#…

Kettle根据分类实现Excel文件拆分——kettle开发31

将整理好的一份供应商付款明细Excel文件,按供应商拆分成多个Excel文件。 实现思路 本文我们首先将供应商付款明细表,按照“名称”拆分成多份Excel文件。拆分Excel文件打算用两个转换实现,一个用来将Excel数据读取到参数中,另外一…

Internet Download Manager(IDM6.41)安装教程+软件安装包下载

IDM是一款多线程下载工具,全称InternetDownloadManager。IDM的多线程加速功能,能够充分利用宽带,所以下载速度会比较快,而且它支持断点续传。它的网站音视频捕获、站点抓取、静默下载等功能,也特别实用。 安 装 包 获 …

图像的几何变换之平移

文章目录 前言需求代码运行结果图 前言 图像的几何变换是一个再基础不过的知识点,包括等距变换,相似变换,仿射变换和投影变换。图像的几何变换是指对图像的位置,尺寸,大小,形状和投影进行变换,…

采集设置记录

采集设置: 1.任务添加 2.采集器设置 采集器设置之规则采集