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 对 ...
随机推荐
- jenkins自动构建前端项目(window,vue)
我们把一个多人协作的vue前端项目发布服务器,一般要经过以下步骤: git更新最新的代码 构建项目 把构建后的代码上传到服务器 如果用jenkins来构建的话,只需要点击一次构建按钮,就可以自动完成以 ...
- python学习笔记(八)-模块
大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...
- [C语言]学习之路
实例:C语言编程题 求100到300之间所有素数 #include <stdio.h> int main(void) { int i,j; for(i = 100;i <= 300; ...
- P2179-[NOI2012]骑行川藏【导数,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出\(E\)和\(n\)个\(s_i,k_i,u_i\)求一个序列\(v_i\)满足 \[\s ...
- Python3模块调用你真的会吗?不懂就来看一看?
前言 学习Python自动化框架的时候,各种文件会相互之间的调用.刚学的时候是不是很头疼!有木有!!一步步告诉你如何调用文件里的类和方法. 经常会调用同目录下的文件还有跨文件的调用 调用同目录下文件A ...
- WPF进阶技巧和实战07--自定义元素01
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...
- Java面向对象编程(二)
关键字 -- this 一.this关键字的使用: 1.this可以用来修饰.调用:属性.方法.构造器. 2.this修饰属性和方法: this理解为:当前对象 或 当前正在创建的对象. 2.1 在类 ...
- 在Vue&Element前端项目中,使用FastReport + pdf.js生成并展示自定义报表
在我的<FastReport报表随笔>介绍过各种FastReport的报表设计和使用,FastReport报表可以弹性的独立设计格式,并可以在Asp.net网站上.Winform端上使用, ...
- HTML基本标记
头部标记 <head></head> 说明:元素的作用范围是整篇文档.元素中可以有元信息定义.文档样式表定义和脚本等信息,定义在HTML语言头部的内容往往不会在网页上直接显示. ...
- 第29篇-调用Java主类的main()方法
在第1篇中大概介绍过Java中主类方法main()的调用过程,这一篇介绍的详细一点,大概的调用过程如下图所示. 其中浅红色的函数由主线程执行,而另外的浅绿色部分由另外一个线程执行,这个线程最终也会负责 ...