APP 自动化之手势操作appium提供API详解(四)
一、手势操作
1.上下左右滑屏
swipe---滑动
java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, starty, endx, endy, duration);
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.0</version>
</dependency>
//向下滑动,实现下拉刷新
public static void testSwipe() {
/**
* Parameters:
* startx starting x coordinate.
* starty starting y coordinate.
* endx ending x coordinate.
* endy ending y coordinate.
* duration amount of time in milliseconds for the entire swipe action to take
*/
// androidDriver.swipe(startx, starty, endx, endy, duration);
androidDriver.swipe(400, 500, 400, 1000, 5000);
}
java-i5.0+ swipe方法已经失效,但是可以采取自定义的swipe方法实现,swipeLeft、swipeRight、swipeUp参考swipeDown实现;
public static void swipeDown(){
//1.实例化TouchAction对象,触摸操作相关
TouchAction touchAction = new TouchAction(androidDriver);
//2.可以根据当前屏幕的宽度和高度来自定义起始点和终止点的坐标来实现滑动的通用操作
Dimension dimension = androidDriver.manage().window().getSize();
int X = dimension.getWidth();
int Y = dimension.getHeight();
int startx = X/2;
int starty = Y/4;
// startPoint 起始点
PointOption startPoint = PointOption.point(startx, starty);
int endx = X/2;
int endy = Y*3/4;
// endPoint 终止点
PointOption endPoint = PointOption.point(endx, endy);
//把原始的滑动时间转换成duration
Duration duration = Duration.ofMillis(5000);
//然后再把duration转化成 WaitOptions
WaitOptions waitOptions = WaitOptions.waitOptions(duration);
//appium将按-等待-移动-释放转换为滑动操作
touchAction.press(startPoint).waitAction(waitOptions).moveTo(endPoint).release();
touchAction.perform();
}
2.放大缩小(zoom---放大,pinch---缩小)
java-client4.X 也是有zoom和pinch方法的可以通过传递坐标的信息就可以实现放大
androidDriver.zoom(x, y);
//androidDriver.zoom(WebElement element)
zoom( x, y )方法其实是由两个MultiTouchAction实现的多点触摸,首先根据你传入的坐标确定偏移量,然后创建两个action分别向反方向移动,同时释放,pinch同zoom相反
java-client5.0+ zoom和pinch方法已经失效,过期,但是可以采用java-client4.X老版本的实现思想
/**
* 自定义放大效果的方法
*/
public static void zoomOut() { //1.实例化多点触摸对象
MultiTouchAction multiTouch = new MultiTouchAction(androidDriver);
//2.得到当前屏幕的高度
int scrHeight = androidDriver.manage().window().getSize().getHeight();
//3.获取当前屏幕的宽高来确定屏幕中心点(x,y)
int x = androidDriver.manage().window().getSize().getWidth()/2;
int y = androidDriver.manage().window().getSize().getHeight()/2;
System.out.println(x+":"+y);
int yOffset = 100; if (y - 100 < 0) {
yOffset = y;
} else if (y + 100 > scrHeight) {
yOffset = scrHeight - y;
}
//两个手指同时向相反方向滑动实现放大的效果
//第一个手指实现滑动
TouchAction action0 = new TouchAction(androidDriver).press(PointOption.point(x, y)).moveTo(PointOption.point(x, y-yOffset)).release();
//第二个手指实现滑动
TouchAction action1 = new TouchAction(androidDriver).press(PointOption.point(x, y)).moveTo(PointOption.point(x, y+yOffset)).release();
multiTouch.add(action0).add(action1);
multiTouch.perform();
}
3.多点触摸(tap---点点)
未完待续...
APP 自动化之手势操作appium提供API详解(四)的更多相关文章
- [总结]JS操作DOM常用API详解
文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...
- 大数据学习笔记——Spark工作机制以及API详解
Spark工作机制以及API详解 本篇文章将会承接上篇关于如何部署Spark分布式集群的博客,会先对RDD编程中常见的API进行一个整理,接着再结合源代码以及注释详细地解读spark的作业提交流程,调 ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- jqGrid APi 详解
jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- SDN 网络系统之 Mininet 与 API 详解
SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持.本文主要介绍了 Mininet 的相关概念与特性,并列 ...
- Java8学习笔记(五)--Stream API详解[转]
为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...
随机推荐
- 『GoLang』面向对象
我们总结一下前面看到的:Go 没有类,而是松耦合的类型.方法对接口的实现. 面向对象语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢? Go实现面向对象的两个关键是stru ...
- docker network 参数
一. 格式 docker network COMMAND 二.COMMAND 讲解 2.1 .docker network connect 格式 docker network connect [OPT ...
- Redis核心原理与实践--散列类型与字典结构实现原理
Redis散列类型可以存储一组无序的键值对,它特别适用于存储一个对象数据. > HSET fruit name apple price 7.6 origin china 3 > HGET ...
- Firewalls命令行配置
1.指定端口开放查询.开放.关闭端口 # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent - ...
- SpringPlugin-Core在业务中的应用
前言 一直负责部门的订单模块,从php转到Java也是如此,换了一种语言来实现订单相关功能.那么Spring里有很多已经搭建好基础模块的设计模式来帮助我们解耦实际业务中的逻辑,用起来非常的方便!就比如 ...
- 开发数学系统时,需要掌握的几个基于Web的数学框架
在做数学系统时,经常要和数学公式打交道,这里介绍几个常用的基于Web的数学处理软件. 数学系统主要包括三类:(1)数学公式的显示,也就是如何使用web显示复杂的数学公式. (2)图像制作,例如长方形, ...
- NOIP&CSP 考前 Dev-cpp 的选项问题和考试心态
(进入考场后您将获得一个崭新的 \(Dev-cpp\),没有中文,没有编译选项,没有缺省源:我还将获得一个崭新的脑子,没有心态,没有智商,没有调试能力--) 中文 \[Step1 \] \[Step2 ...
- java设计模式_工厂模式
关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...
- Spirit带你了解如何安全引入第三方资源
Spirit带你了解如何安全的引入第三方资源 本文介绍一下如何安全的引入第三方资源 同源策略(SOP) 首先我们来了解一下什么是同源策略,下面的是wiki百科的定义 同源策略是指Web浏览器中,允许某 ...
- 初识Tomcat源码
Tomcat 部署的三种方式 打包成war包 部署到webapp目录录下 为什么要打包成war包,而不是jar包呢? 因为jar包可能是一个项目,也可能是一个依赖,Tomcat读取容易造成混淆.于是一 ...