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

news2025/9/20 2:58:13

文章目录

  • 前言
  • 一、点击&输入&清空操作
  •       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)核心代码

总结

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

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

相关文章

20240613确认飞凌的OK3588-C的核心板的HDMI IN功能

20240613确认飞凌的OK3588-C的核心板的HDMI IN功能 2024/6/13 16:09 v4l2-ctl --list-devices v4l2-ctl --list-formats-ext -d /dev/video8 【这里必须拿到HDMI OUT机芯的分辨率。如果拿不到,肯定硬件异常/线没有接好】 v4l2-ctl -V -d /dev/video8 gst-launch-1.…

宏电“灌区哨兵”助力灌区信息化建设,开启灌区“智水”时代

灌区是保障国家粮食安全的重要水利设施。“十四五”提出,要推进大中型灌区节水改造和精细化管理。灌区信息化是建设智慧水利、深化行业监管、提升灌区科学管理水平的基础支撑,也是“十四五”期间灌区现代化改造的重点内容之一。 宏电智慧灌区信息化解决方…

探秘扩散模型:训练算法与采样算法的双重解读

很早之前就新建了一个专栏从0开始弃坑扩散模型,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。 整个专栏的学习顺序可以见这篇汇总文章 很多时候我们看到一篇文章很长,难免会心生胆怯,所以我将这些…

docker的教程长亭

把我的常用docker写在这里 之前用 vul - hub 靶场经常用 现在docker不知道为什么挂了 开启 docker-compose up -d 关闭 docker-compose down docker ps 只是运行 docker ps -a 所有 包括停止 docker ps -q 只看id docker stop <container_name_or_id> docker 的容器…

Pinia的简要概述

Pinia是专为 Vue 应用程序开发的状态管理库&#xff0c;Pinia 支持 Vue2和 Vue3。在 Vue3项目中,既可以使用传统的 Vuex实现状态管理&#xff0c;又可以使用 Pinia 实现状态管理。本章将对 Pinia的基本使用方法进行讲解。 一.Pinia 概述 Pinia 是新一代的轻量级状态管理库&…

Echarts图表实现X轴自动滚动加载数据

1.用到了Echarts图表自带的dataZoom组件 2.使用定时器定时刷新数据 效果图 关键代码 dataZoom: [{xAxisData: 0,//这里是从X轴的0刻度开始show: false,//是否显示滑动条type: slider, // 这个 dataZoom 组件是 slider 型 dataZoom 组件startValue: 0, // 从头开始。endValue:…

小程序 UI 风格,构建美妙视觉

小程序 UI 风格&#xff0c;构建美妙视觉

数据结构——队列(Queue)详解

1.队列&#xff08;Queue&#xff09; 1.1概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out)的性质 入队列&#xff1a;进行插入操作的一端称为队尾(Tail/Rear) 出…

10054 远程主机强迫关闭了一个现有的连接

在连接数据库SQLserver&#xff0c;时可能会出现如下的故障&#xff0c;特别是当操作系统是Win11时&#xff0c;在连接比较旧的版本数据库时会出现这样的问题&#xff1a;10054 远程主机强迫关闭了一个现有的连接。报错如下图所示&#xff1a; 根据微软的官方网站&#xff0c;查…

U盘文件损坏且无法读取怎么修复?五个方法帮你搞定

在现代社会&#xff0c;U盘已经是我们日常生活和工作中不可缺少的工具之一。U盘的容量大、体积小、携带方便&#xff0c;很多人都喜欢使用U盘用于个人和工作数据的存储和传输。但是&#xff0c;U盘和其他的电子设备一样&#xff0c;在试用期间有时候会出现U盘打不开提示目录结构…

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器&#xff0c;开启root 2.jadx&#xff1a; https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【CT】LeetCode手撕—21. 合并两个有序链表

目录 题目1-思路2- 实现⭐21. 合并两个有序链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;21. 合并两个有序链表 1-思路 双指针&#xff1a;题目提供的 list1 和 list2 就是两个双指针 通过每次移动 list1 和 list2 并判断二者的值&#xff0c;判断完成后将其 插入…

【Text2SQL 论文】CodeS:Text2SQL 领域的开源语言模型

论文&#xff1a;CodeS: Towards Building Open-source Language Models for Text-to-SQL ⭐⭐⭐⭐ arXiv:2402.16347, SIGMOD 2024 人大 Code: CodeS | GitHub 一、论文速读 本文提出一个开源的专门用于 Text2SQL 任务的 LLM —— CodeS&#xff0c;有多个参数规模的版本&…

揭秘App广告监测黑科技!Xinstall助你洞察用户行为,提升转化率!

在移动互联网时代&#xff0c;App的推广与运营已成为企业获取用户、提升品牌知名度的重要手段。然而&#xff0c;面对激烈的市场竞争&#xff0c;如何确保广告投放的精准性、提高广告效果转化率&#xff0c;成为了摆在每一位推广者面前的难题。今天&#xff0c;我们就来聊聊如何…

盘点:支持国产化信创的项目管理软件有哪些?

对于个人或者预算充足的团队来说&#xff0c;找到一个靠谱、好用的项目管理软件是一件很有必要的事情&#xff0c;那么目前国内有哪些【国产化信创】的项目管理软件值得选择呢&#xff1f; 下面盘点10款&#xff0c;每一款都独具特色。 1、国产化项目管理软件&#xff0c;可灵活…

Go微服务框架Kratos中makefile命令的使用方法及报错处理

运用 kratos 微服务框架开发项目时&#xff0c;可以使用提供的 makefile 中的命令自动且快速生产相关代码&#xff0c;提高开发效率。 krotos中makefile文件内容如下&#xff1a; GOHOSTOS:$(shell go env GOHOSTOS) GOPATH:$(shell go env GOPATH) VERSION$(shell git descri…

【讯为Linux驱动开发】6.自旋锁spinlock

【自旋锁】 线程A获取自旋锁后&#xff0c;B假如想获取自旋锁则只能原地等待&#xff0c;仍占用CPU&#xff0c;不会休眠&#xff0c;直到获取自旋锁为止。 【函数】 DEFINE SINLOCK(spinlock t lock) 定义并初始化一个变量int spin lock init(spinlock t*lock) 初始化自…

工业4.0下的PLC进化论:ARMxy计算机如何重塑自动化

智能物流系统的高效与精准成为企业竞争力的关键。在这个背景下&#xff0c;传统的PLC系统因其固有的局限性&#xff0c;如扩展性差、系统封闭等&#xff0c;开始显得力不从心。ARMxy工业计算机作为新一代的PLC替代方案&#xff0c;凭借其低功耗、高性能以及高度的灵活性&#x…

OpenStack入门初体验

云计算概述 概念 侠义的云计算是指IT基础设施的交付和使用模式广义的云计算是指服务的交付和使用模式云计算资源 网络资源存储资源计算资源 云计算的服务模型 IaaS&#xff08;基础架构即服务&#xff09; IaaS 提供最底层的 IT 基础设施服务&#xff0c;包括处理能力、存储…

Spotify 音乐平台宣布成立内部创意机构,测试生成式人工智能配音广告

Spotify是一家流媒体音乐平台&#xff0c;提供广泛的音乐、播客和视频内容。用户可以通过订阅服务Spotify Premium来享受更多高级功能&#xff0c;如无广告播放、离线听歌等。 Spotify 周四宣布&#xff0c;它将通过其首家名为 Creative Lab 的内部创意机构进一步进军广告领域…