【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)核心代码

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Threejs-12、场景的线性雾和指数雾

1、创建场景雾 //创建场景雾 scene.fog new THREE.Fog(0x999999,0.1,50);2、创建场景指数雾 scene.fog new THREE.FogExp2(0x999999,0.05);3、 设置场景背景颜色 scene.background new THREE.Color(0x999999);完整代码 <script setup> // 导入threejs import * as…

string类小贴士:让你的C++字符串处理更高效

目录 ​编辑 一、为什么要学习string类 1.1 C语言中的字符串 1.2 面试题 &#x1f333;字符串相加https://leetcode.cn/problems/add-strings/description/ 二、标准库中的string类 2.1 string类 2.2 string类的常用接口说明 1. string类对象的常见构造 2. string类对…

精准定位,智慧提纯:高级数据提取策略

在数据驱动的时代&#xff0c;高级数据提取策略成为企业决策、科学研究以及各类项目成功的关键。数据提取&#xff0c;不仅仅是简单地收集信息&#xff0c;而是需要精准定位目标数据&#xff0c;并通过智慧提纯方法&#xff0c;从海量数据中提取出有价值、有深度的信息。本文将…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第40课-实时订阅后端数据

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第40课-实时订阅后端数据 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引…

程序员要学会偷懒--excel转建表语句

如下需求&#xff1a;一个复杂的统战系统&#xff0c;用户信息字段总共有26个sheet&#xff0c;54张小表&#xff0c;没有什么复杂的业务逻辑&#xff0c;纯增删改查。字段目测在1000个以上。建表54张。领导交待了一句这周末完成&#xff0c;我&#xff1f;&#xff1f;&#x…

【数组】【快慢双指针】删除有序数组中的重复项+移除元素+删除有序数组中的重复项II

今天趁热打铁&#xff0c;接着刷了几道标签是【数组】的题&#xff0c;基本都是双指针就能解决。 1、删除有序数组中的重复项 该题对应力扣网址 class Solution { public:int removeDuplicates(vector<int>& nums) {int i,j;int count 0;int n nums.size();nums.…

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag

实现效果&#xff1a; template&#xff1a; <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …

下载NVIDIA官网的培训视频,生成中文字幕和PPT

下载NVIDIA官网的培训视频,生成中文字幕和PPT 一.[视频网站](https://www.nvidia.cn/on-demand/session/gtc24-s62129/)二.如何获取视频的原始链接三.下载视频的脚本【生成output.mp4】四.安装whisper环境【语音识别生成英文字幕】五.下载whisper模型六.生成英文字幕【输出merg…

解决微调后的模型导入ollama后出现”胡言乱语“情况

解决微调后的模型导入ollama后出现”胡言乱语“情况 先说结论&#xff0c;出现该问题的原因主要是因为Modelfile文件没有配置好。 这个是ModelFile文件的配置&#xff0c;第一行的from为要用的模型地址。 # sets the temperature to 1 [higher is more creative, lower is mo…

陪诊小程序开发,陪诊师在线接单

近几年&#xff0c;陪诊师成为了一个新兴行业&#xff0c;在科技时代中&#xff0c;陪诊小程序作为互联网下的产物&#xff0c;为陪诊市场带来了更多的便利。 当下生活压力大&#xff0c;老龄化逐渐严重&#xff0c;年轻人很难做到陪同家属看病。此外&#xff0c;就诊中出现了…

Vue3项目中Pinia使用详解

开篇 本文的目的是创建一个使用typescript的vue3项目&#xff0c;并使用pinia来管理状态。 详细步骤 创建项目 创建vue3项目&#xff0c;并使用vite作为打包工具 npm create vitelatest vue3_pinia // 选择vue,随后选择typesript进入项目&#xff0c;并按照依赖包 cd vue3_…

植物大战僵尸(杂交版)最新版V2.1来袭!

【新手指导】最新版v2.1来袭 1.闪退怎么办&#xff1f; 答:窗口模式可以解决大部分问题。输入法转换成英文也可以。最后一种办法管理员运行&#xff0c;再后台可运行&#xff0c;即便不是窗口也不会闪退&#xff0c;亲测有效 2.哪里下载&#xff1f; 答&#xff1a;夸克网盘htt…

OrangePi AIpro测评:性能、应用与开发者体验解析

一、OrangePi AIpro介绍 OrangePi AIpro(8T)采用昇腾AI技术路线&#xff0c;具体为4核64位处理器AI处理器&#xff0c;集成图形处理器&#xff0c;支持8TOPS AI算力&#xff0c;拥有8GB/16GB LPDDR4X&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&#xff0c;支持双4K高…

学习ZYNQ——使用IP核

文章目录 [TOC](文章目录) 前言一、新建Vivado工程二、使用IP核1.加载IP2.查看IP核3.应用IP核 三、添加源文件1.led.v2.约束文件pin_led.xdc 四、综合、运行程序 前言 加载前面使用HLS生成的IP核&#xff0c;实现LED灯的闪烁&#xff0c;熟悉整套流程的步骤&#xff1a; 前一篇…

关于对pagination.js源代码进行修改且引入项目使用

实现效果 使用定时器对组件进行每秒请求&#xff0c;每过固定时间之后&#xff0c;进行下一页项目请求&#xff0c;进行到最后一页请求的时候返回第一页。 首先引入js插件 <script src"./js/pagination.js" type"text/javascript"></script>…

NAND flash测试-雷龙发展

文章目录 一、简介 二、速度测试 最近比较忙&#xff0c;也一直没空发什么文章&#xff0c;这算是新年第一篇吧&#xff0c;正好最近收到了一个雷龙的flash芯片&#xff0c;先拿来玩一下吧。 有兴趣的小伙伴可以去雷龙官网找小姐姐领取一个免费试用。 一、简介 大概样子就是上面…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代&#xff0c;知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域&#xff0c;如何高效管理和利用知识资源&#xff0c;成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

RCD负载箱:电力系统的安全保障

在电力系统中&#xff0c;负载箱是一种重要的设备&#xff0c;它的主要功能是模拟实际的电力负载&#xff0c;以便对电力系统进行各种性能测试和分析。RCD负载箱一种特殊类型的负载箱&#xff0c;它具有剩余电流保护功能&#xff0c;可以有效地防止电气火灾和电击事故的发生&am…

基于Spring Boot的智能分析平台

项目介绍&#xff1a; 智能分析平台实现了用户导入需要分析的原始数据集后&#xff0c;利用AI自动生成可视化图表和分析结论&#xff0c;改善了传统BI系统需要用户具备相关数据分析技能的问题。该项目使用到的技术是SSMSpring Boot、redis、rabbitMq、mysql等。在项目中&#…