Appium 滑动踩坑记
前言
对于不同java-client版本,很多的API已经产生大的变化,所以一些API大家会发现已经失效或者使用方式发生了变化,滑动就是其中一项,这篇文章对滑动在不同的java-client版本以及不同的Appium版本使用给大家介绍下,避免大家踩坑。
不同的java-client版本
当前Appium版本为Appium desktop V1.8.2(Appium Server V1.9.1)
java-client V4.1.2
在此版本,java-client有提供swipe方法帮助我们完成滑动
void io.appium.java_client.android.AndroidDriver.swipe(int startx, int starty, int endx, int endy, int duration)
//Convenience method for swiping across the screen.
Overrides: swipe(...) in AppiumDriver
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(145, 448, 345, 448, 300);
多次滑动
TouchAction touchAction = new TouchAction(androidDriver);
touchAction.press(145,448).waitAction(100).moveTo(345, 448).moveTo(560, 448).release().perform();
java-client V5.0.4
到了此版本,swipe方法已经失效,需要我们写代码来完成滑动
单次滑动
TouchAction touchAction = new TouchAction(androidDriver);
Duration duration = Duration.ofMillis(100);
touchAction.press(145,448).waitAction(duration).moveTo(345,448).release().perform();
多次滑动
TouchAction touchAction = new TouchAction(androidDriver);
Duration duration = Duration.ofMillis(100);
touchAction.press(145,448).waitAction(duration).moveTo(345, 448).moveTo(560, 448).release().perform();
java-client V6.1.0
此版本API使用方式相比较V5.0.4发生了变化,参数由之前的int类型(XY轴坐标)变成了PointOption类型
单次滑动
TouchAction touchAction = new TouchAction(androidDriver);
Duration duration = Duration.ofMillis(100);
touchAction.press(PointOption.point(145, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(345, 448)).release().perform();
多次滑动
//使用绝对坐标的方式完成多次滑动
TouchAction touchAction = new TouchAction(androidDriver);
Duration duration = Duration.ofMillis(300);
touchAction.press(PointOption.point(145, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(345, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(560, 448)).release().perform();
不同的Appium版本
不同的Appium版本对于单次滑动来说都是绝对坐标的方式,但是需要注意的是:在进行多次滑动的时候(也就是多次moveTo),传入的坐标有的Appium不再是绝对坐标了,而是相对于前一个坐标的偏移量
当前java-client版本 V6.1.0
Appium desktop V1.5.0(Appium Server V1.7.2)
对于此版本,多次moveTo应该就是传入前一个坐标的偏移量
Duration duration = Duration.ofMillis(100);
//Appium Server V1.7.2,多次滑动使用的是相对前一坐标的偏移量
touchAction.press(PointOption.point(145, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(200, 0)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(200, 0)).release().perform();
Appium desktop V1.8.2(Appium Server V1.9.1)
此版本Appium又改变了,多次moveTo是使用的绝对坐标
Duration duration = Duration.ofMillis(100);
//Appium Server V1.9.1,多次滑动使用的是绝对坐标
touchAction.press(PointOption.point(145, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(345, 448)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(545, 448)).release().perform();
Appium 滑动踩坑记的更多相关文章
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- 【踩坑记】从HybridApp到ReactNative
前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...
- Spark踩坑记——共享变量
[TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...
- Spark踩坑记——从RDD看集群调度
[TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...
- djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记
情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...
- HttpWebRequest 改为 HttpClient 踩坑记-请求头设置
HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...
- vue踩坑记
vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...
随机推荐
- 大数据Excel导出方案
static void Main(string[] args) { Excel.Application app = new Excel.Application(); Excel._Workbook r ...
- Dr. Memory Quickstart Instructions in Chinese
For similar insructions in English, please see RPI CSCI1200 instructions. 程序内存调试 程序内存错误有很多种,比如内存访问错误 ...
- redis的两种持久化方案
前言 人生在于折腾系列,网络,多线程等系列博客楼主还在继续折腾也不会放弃.缓存的知识其实并不仅仅在于简单的增删改查,我觉得有必要全面深入的学习一波.记录学习的过程与体悟. RDB 什么是RDB 对re ...
- 【转载】C#的ArrayList使用IndexOf方法查找第一个符合条件的元素位置
在C#的编程开发中,ArrayList集合是一个常用的非泛型类集合,在ArrayList集合中如果需要查找第一个符合条件的元素所在的位置,可以使用ArrayList集合的IndexOf方法,Index ...
- CSS泣鬼神
博主网站 一.CSS介绍和语法 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 每个CSS样式由两个组成部分:选择器和声明.声明又包括属性和属性值.每个声明 ...
- vue开发环境配置
一.开发工具 Visual Studio Code 二.环境搭建 vue推荐开发环境: Node.js: javascript运行环境(runtime),不同系统直接运行各种编程语言 npm: Nod ...
- 尚硅谷MySQL高级学习笔记
目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...
- 203--Remove LinkedList Elements
package LinedList; public class RemoveLinkedListElements { //解法一:循环 public ListNode removeElements(L ...
- MySQL修炼之路一
1. MySQL概述 1. 什么是数据库 存储数据的仓库 2. 都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3. 提供数据库服务的软件 1. 软件分类 MySQL. ...
- 10年前错过比特币,如今有斯坦福区块链项目pi币,对标btc,手机免费挖矿详细教程。
这一个斯坦福几个博士创业者做一个项目,目前还处于早期阶段,除了每天点一下挖矿之外,貌似不需要其他的操作,不需要耗费流量资源和手机大量的运算能力,就是一个安静的App而已....国内目前知道的人还不太多 ...