全网最新最全面的Appium自动化:Appium常用操作之点击滑动类操作

news2024/11/26 16:34:14

点击&滑动类操作

  在进行app自动化的时候,经常会进行点击或滑动的操作,比如点击坐标,左右滑动,上下滑动等,Appium相应提供了解决方案。

坐标的开启步骤:

开发者选项——指针位置开启

坐标展示:

在flick和swipe中都提到了坐标,android界面坐标可以通过如下方式进行获取:

1、uiautomatorviewer或inspector工具识别元素时的bounds属性

2、通过android系统自带的工具,进入设置--开发者选项--指针位置

常用的API如下:

一、点击类操作

通过坐标进行点击操作:

1、tap(self,positions,duration=None):模拟手指点击(最多五个手指),可设置按住时间长度(毫秒)

positions:list类型,里面对象是元组,最多五个。如:[(100,20),(100,60)]

duration:持续时间,单位毫秒,如:500

代码示例:

from appium import webdriver  # 导入appium 驱动包
des = {
    'platformName':'Android',
    'platformVersion':'6.0.1',  # 填写android虚拟机/真机的系统版本号
    'deviceName':'MuMu',      # 填写安卓虚拟机/真机的设备名称
    'appPackage':'com.android.settings',    # 填写被测app包名
    'appActivity':'.Settings',    # 填写被测app的入口
    'udid':'127.0.0.1:7555',    # 填写通过命令行 adb devices 查看到的udid
    'noReset':True,               # 是否重置APP
    'unicodeKeyboard':True,       # 是否支持中文输入
    'resetKeyboard':True,         # 是否支持重置键盘
    'newCommandTimeout':30        # 30秒没发送新命令就断开连接
       }

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

# 指定坐标点击
driver.tap([(300,1020)],2000)  # 模拟手指轻轻的点击
# 三个坐标同时点击
driver.tap([(300,1020),(300,550),(380,1450)],2000)  # 模拟手指轻轻的点击

注:由于不同手机的分辨率不同,导致通过坐标进行点击会出现不稳定的情况

解决坐标点击对于不同手机不稳定的方法:

使用driver.get_window_size()  获取屏幕尺寸,然后通过百分比确定坐标,进行等比例换算

示例代码:

# driver.tap([(300,1020)])  # 原先元素的坐标
print(300/size['width'],1020/size['height'])  # 得到一个百分比 0.27  0.5
driver.tap([(int(size['width']*0.27),int(size['height']*0.5))])  # 通过百分比换算的元素坐标

二、滑动类操作

通过元素进行滑动操作

1、scroll(self,origin_el,destination_el,duration=None):模拟从元素origin_el滚动至元素destination_el

代码示例:

e1 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="显示"]')
e2 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="电池"]')
driver.scroll(e2,e1)  # 从元素e2 滑动到元素e1,实现向下滑动

通过元素进行拖动操作

2、drag_and_drop(self,origin_el,destination_el):将元素origin_el拖到目标元素destination_el

代码示例:

e1 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="显示"]')
e2 = driver.find_element(By.XPATH,'//android.widget.TextView[@text="电池"]')
driver.drag_and_drop(e2,e1)  # 拖动(与scroll方法效果一样)

通过坐标进行滑动操作

3、flick(self,start_x,start_y,end_x,end_y):按住A点后快速滑动至B点,A点的坐标为start_x,start_y,B点的坐标为end_x,end_y,使用flick方法进行滑动偶尔出现不稳定,可以把flick方法中的press改为long_press解决。

press:moveto中endx,endy是相对startx,start_y的偏移量并存在随机滑动加速度或缓冲滑动

long_press:moveto中endx,endy是绝对值。

flick方法进行滑动偶尔出现不稳定,修改flick方法中的press改为long_press解决

修改前:                                             修改后:

   

              

 代码示例:

driver.flick(300,1020,300,550)  # 通过坐标进行滑动操作

通过坐标进行滑动操作并有滑动时间控制

4、swipe(self,start_x,start_y,end_x,end_y,duration=None):从A点滑动至B点,滑动时间为毫秒,A点的坐标为start_x,start_y,B点的坐标为end_x,end_y

利用swipe方法实现滑动举例
下滑操作:
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
driver.swipe(x/2,y/2,x/2,y/4,0) #上滑相反坐标即可(采用绝对坐标)

左滑操作:
driver.press_keycode(3)
x=driver.get_window_size()['width']
y=driver.get_window_size()['height']
driver.swipe(x/4*3,y/2,x/4*1,y/2,0)

代码示例:

# 滑动操作--推荐使用该方法
driver.swipe(300,1020,300,550,5000)  # 通过坐标进行滑动操作滑动时间为3秒

注:由于不同手机的分辨率不同,导致通过坐标进行滑动会出现不稳定的情况

解决坐标滑动对于不同手机不稳定的方法:

使用driver.get_window_size()  获取屏幕尺寸,然后通过屏幕的比例滑动

代码示例:

# 从屏幕四分之三的位置滑动到四分之一的位置
driver.swipe(size['width']/2,size['height']*3/4,size['width']/2,size['height']*1/4,2000)

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

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

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

相关文章

C/C++---------------LeetCode第118. 杨辉三角

杨辉三角 题目及要求动态规划在mian内使用 题目及要求 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 < numRow…

算法通关村第二关—链表反转的拓展问题(白银)

链表反转的拓展问题 一、指定区间反转 LeetCode92&#xff1a;给你单链表的头指针head和两个整数left和right,其中left<right。请你反转从位置left到位置right的链表节点&#xff0c;返回反转后的链表。 1.1 头插法 反转的整体思想是&#xff0c;在需要反转的区间里&…

Linux 调试器 --- g d b 使用

目录 一&#xff1a;gdb简介 二&#xff1a;示例代码 三&#xff1a;使用 1.启动gdb 2.各种指令 <1>: 查看源代码 <2>:设置断点 <3>:查看断点信息 <4>:删除断点 <5>: run <6>:逐过程调试 <7>:逐语句调试 <8>:查…

AntV和AntD之间的区别与联系

前言&#xff1a;最近在调研前端的一些框架&#xff0c;技术栈主要是用react&#xff0c;所以找到了2个十分相似解决方案&#xff0c;拿来对比一下&#xff08;antd和antv都是基于react&#xff09; antd对比antv antd antv 解决方案企业级 UI 设计语言数据可视化解决方案提供…

Innodb数据结构空间占用

了解数据存储空间占用&#xff0c;可以更方便我们再企业中对于数据库相关优化做评估。 一、查看当前数据表空间占用信息 首先这里准备一张数据库表约2.3w数据量&#xff1a; CREATE TABLE project (tenantsid bigint(20) NOT NULL DEFAULT 0 COMMENT 租户ID,project_id bigi…

双击热备方案实现(全)

双击热备是应用与服务器的一种解决方案&#xff0c;其构造思想是主机和从机通过TCP/IP网络连接&#xff0c;正常情况下主机处于工作状态&#xff0c;从机处于监视状态&#xff0c;一旦从机发现主机异常&#xff0c;从机将会在很短的时间内代替主机。完全实现主机的功能。 要想实…

odoo15关于tree视图添加按钮说明

1、odoo15的tree已经可以像form一样直接添加header标签 2、选取具体数据后&#xff0c;按钮出现&#xff0c;只需要在按钮中添加具体功能即可&#xff0c;下面是一个继承 3、效果&#xff1a;

JVM之四种引用类型(五)

JVM 系列吊打面试官&#xff1a;说一下 Java 的四种引用类型 四种引种类型 1.强引用 在 Java 中最常见的就是强引用&#xff0c;把一个对象赋给一个引用变量&#xff0c;这个引用变量就是一个强引用。当一个对象被强引用变量引用时&#xff0c;它处于可达状态&#xff0c;它是…

如何通过添加香港高防IP来防御攻击?

​  针对外贸建站&#xff0c;租用香港服务器&#xff0c;除了站长们较为关注的价格外&#xff0c;安全性也是至关重要的。香港服务器在使用中可能会遭受到常见的 DDoS 网络攻击&#xff0c;而在 DDoS 防护这一块&#xff0c;您可以使用香港 DDoS 高防 IP 和香港高防服务器来…

基于51单片机多功能时钟闹钟系统

**单片机设计介绍&#xff0c;基于51单片机多功能时钟闹钟系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的多功能时钟闹钟系统是一种基于单片机的电子设备&#xff0c;能够显示时间、设置闹钟、进行计时以及提…

解决方案:Mac 安装 pip

python3 --version 通过以下命令来下载pip&#xff1a; curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py curl命令允许您指定一个直接下载链接。使用-o选项来设置下载文件的名称。 通过运行以下命令安装下载的包&#xff1a; python3 get-pip.py

POJ 3233 Matrix Power Series 动态规划(矩阵的幂)

一、题目大意 给出一个矩阵A&#xff0c; 输出矩阵B的每一项对M取余数的值。 二、解题思路 以二维矩阵为例&#xff0c;首先计算K2的情况&#xff0c;我们设结果矩阵为B 有如下表达式 那么不难看出&#xff0c;需要的矩阵其实就是以下的两个矩阵相乘后的左上角的N*N个 然后…

Linux中的UDEV机制与守护进程

Linux中的UDEV守护进程 udev简介守护进程守护进程概念守护进程程序设计守护进程的应用守护进程和后台进程的区别 UDEV的配置文件自动挂载U盘 udev简介 udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设…

3.4 路由器的DHCP配置

实验3.4 路由器的DHCP配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施&#xff08;一&#xff09;配置基于接口地址池的DHCP1.交换机的基本配置2.路由器的基本配置3.开启路由器的DHCP服务器功能4.配置路由器接口的DHCP功能5.设置计算机使用DHCP方式获取IP地…

前端又出新轮子Nue.js,但还是低代码更香!

前言 别TM卷了&#xff01;&#xff01;&#xff01; 自从前后端分离以来&#xff0c;前端前端的车轮滚滚向前&#xff0c;轮子造的越来越圆。每个人都在适应这个轮子的节奏&#xff0c;稍微不注意就会被甩出车轮之外。 调侃归调侃&#xff0c;既然口子已经开了&#xff0c;…

Java操作Excel之 POI介绍和入门

POI是Apache 提供的一个开源的Java API&#xff0c;用于操作Microsoft文档格式&#xff0c;如Excel、Word和PowerPoint等。POI是Java中处理Microsoft文档最受欢迎的库。 截至2023/12&#xff0c; 最新版本时 POI 5.2.5。 JDK版本兼容 POI版本JDK版本4.0及之上版本> 1.83.…

游戏测试 vs 软件测试:你知道它们的真正区别吗?

游戏测试和软件测试有什么区别&#xff1f;10大测试点对比&#xff01; 针对手游而言&#xff0c;游戏测试的本质是APP&#xff0c;所以不少手游的测试方式与APP测试异曲同工&#xff0c;然而也有所不同。APP更多的是具有一种工具&#xff0c;一款APP好不好用不重要&#xff0…

【译】DispatcherServlet

1.1. DispatcherServlet 见 Reactive 技术栈中的等效内容 Spring MVC和其他许多Web框架一样&#xff0c;是围绕前端控制器模式设计的&#xff0c;其中一个中央 Servlet&#xff0c;即 DispatcherServlet&#xff0c;为请求处理提供了一个共享算法&#xff0c;而实际工作则由可…

Unity 网格布局控件-Grid Layout Group

Unity 网格布局控件-Grid Layout Group是Unity中的UGUI控件&#xff0c;用于在 UI 中创建网格布局&#xff0c; 它的作用是&#xff1a;自动将子对象排列成网格&#xff0c;即我们可以通过该组件对子对象按行和列的形式排列&#xff0c;根据指定的约束条件自动调整它们的大小和…

【网络安全】红蓝对抗之企业互联网安全防护

01 什么是“红蓝对抗”&#xff1f; “红蓝对抗”最早起源于古罗马军队&#xff0c;在沙盘中用红色和蓝色来代表敌人和自己&#xff0c;他们认为蓝色代表勇敢和忠诚&#xff0c;红色代表血腥和暴力&#xff0c;所以选择用蓝色代表自己。 在中国&#xff0c;由于传统习俗与文化…