【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中国(武汉)社会公共安全产品暨数字城市产业展览会(简称:湖北安博会)在武汉国际会展中心隆重开幕。作为行业内最具影响力的展会之一,此次盛会将汇聚来自全球的顶尖企业、专…

Github 2024-06-08 开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-08统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目4Python项目2Swift项目1Svelte项目1Jupyter Notebook项目1非开发语言项目1Go项目1Vue项目1Lua项目1Visual Studio Code - 开源项…

G6 - CycleGAN实战

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

Vue小记——如何理解 $nextTick( ) ?

1、如何理解 $nextTick() 是一个非常重要的方法,用于在数据变动后,但DOM更新完成之前,执行特定的回调函数。这个方法确保了代码在DOM元素实际被更新之后才运行。 这是用来处理Vue的异步更新队列的。在Vue中,当你改变数据时&#…

OSINT技术情报精选·2024年6月第1周

OSINT技术情报精选2024年6月第1周 2024.6.11版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、经合组织:《2024数字经济展望:第1卷,拥抱技术前沿》 经合组织近日发布《2024数字经济展望》报告第一卷,…

每天五分钟深度学习:逻辑回归算法完成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)技术来放大图像,同时保持或甚至增强图像的细节和清晰度。这款软件特别适用于需要高质量图像放大的摄影师、设计师以及其他视觉内容创作者…

四六级考前突击之同义词替换

最常见的十组同义词替换 新的 Novel-new-fresh-most recent 奇怪的 Strange-odd-unusual-uncommon-Unfamiliar-peculiar odds之后的odds变成了机会的意思,同义词有chance-opportunity 传统 Convention-tradition convention还有大会和集会的意思 形容词为Conventional…

图片based64编码解码python代码

图片based64编码解码python代码 import base64 from PIL import Imagedef image_to_base64(image_path):# 打开图片文件image Image.open(image_path)# 将图片转换为二进制数据image_bytes Nonewith open(image_path, rb) as image_file:image_bytes image_file.read()# 将二…

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

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

dvc 更新加载模型版本控制

dvc即data version control, 是一种针对人工智能项目(机器学习或者深度学习)的数据版本管理工具。DVC的操作和GIT类似,可以认为为GIT的二次开发封装。结合GIT,DVC可以有效的管理人工智能项目的整个流程,包括代码&#…

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

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

并 查 集 模 板

朴素并查集&#xff1a; int p[N]; //存储每个点的祖宗节点// 返回x的祖宗节点int find(int x){if (p[x] ! x) p[x] find(p[x]);return p[x];}// 初始化&#xff0c;假定节点编号是1~nfor (int i 1; i < n; i ) p[i] i;// 合并a和b所在的两个集合&#xff1a;p[find(a)]…

【React】配置别名路径@

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

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

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

系统编程 - kill,alarm,read,write

1、父进程杀死子进程 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <signal.h> #include <unistd.h>int main() {pid_t pid;pid fork();if(pid < 0){perror("fork failed");}else if(pid 0){int i …

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

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

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

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

docker Pulling fs layer 含义

在使用Docker时&#xff0c;当你执行 docker pull 命令来获取一个新的镜像&#xff0c;控制台输出中可能会出现 "Pulling fs layer" 的信息。这是Docker拉取镜像过程中的一个步骤&#xff0c;下面是对这一过程的解释&#xff1a; Docker 镜像是由一系列的层&#xf…