前言

对于不同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 滑动踩坑记的更多相关文章

  1. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  2. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  3. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  4. 【踩坑记】从HybridApp到ReactNative

    前言 随着移动互联网的兴起,Webapp开始大行其道.大概在15年下半年的时候我接触到了HybridApp.因为当时还没毕业嘛,所以并不清楚自己未来的方向,所以就投入了HybridApp的怀抱. Hy ...

  5. Spark踩坑记——共享变量

    [TOC] 前言 Spark踩坑记--初试 Spark踩坑记--数据库(Hbase+Mysql) Spark踩坑记--Spark Streaming+kafka应用及调优 在前面总结的几篇spark踩 ...

  6. Spark踩坑记——从RDD看集群调度

    [TOC] 前言 在Spark的使用中,性能的调优配置过程中,查阅了很多资料,之前自己总结过两篇小博文Spark踩坑记--初试和Spark踩坑记--数据库(Hbase+Mysql),第一篇概况的归纳了 ...

  7. djangorestframework+vue-cli+axios,为axios添加token作为headers踩坑记

    情况是这样的,项目用的restful规范,后端用的django+djangorestframework,前端用的vue-cli框架+webpack,前端与后端交互用的axios,然后再用户登录之后,a ...

  8. HttpWebRequest 改为 HttpClient 踩坑记-请求头设置

    HttpWebRequest 改为 HttpClient 踩坑记-请求头设置 Intro 这两天改了一个项目,原来的项目是.net framework 项目,里面处理 HTTP 请求使用的是 WebR ...

  9. vue踩坑记

    vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...

随机推荐

  1. 关于SQL server事务

  2. 在React中写一个Animation组件,为组件进入和离开加上动画/过度

    问题 在单页面应用中,我们经常需要给路由的切换或者元素的挂载和卸载加上过渡效果,为这么一个小功能引入第三方框架,实在有点小纠结.不如自己封装. 思路 原理 以进入时opacity: 0 --> ...

  3. JavaWeb Listener之HttpSessionBindListener

    HttpSessionBindListener        监听把自身这个对象绑定到HttpSession对象上.解绑 绑定到HttpSession对象上,其实就是调用session的setAttr ...

  4. C++ http服务

    1.需要使用c++提供http服务,本来想使用libevent,但是经过一番搜索后,发现了只需要引用2个文件的mongoose库. 官方文档:https://cesanta.com/docs/over ...

  5. thinkphp5连接sql server

    我用的环境是phpstudy,php版本是5.6,thinkphp连接sql server 方法如下: 1.修改database.php文件里的数据库信息 2.进入php扩展目录.我的是“E:\php ...

  6. ubuntu 18.04 设置静态ip方法

    1. 前言 本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址. 2. 确认你要修改的网卡号 先确认你要修改的网卡号,假设你的服 ...

  7. 回顾Python装饰器

    函数装饰器(function decorator)可以对函数进行“标注”,给函数提供更多的特性. 在理解装饰器之前需要理解闭包(closure).Python3.0 引入了保留关键字 nonlocal ...

  8. 【转】Pandas学习笔记(三)修改&添加值

    Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...

  9. JS高阶---数据、变量、内存

    [一]基础 (1)什么是数据? 存储在内存里 代表特定信息 本质为0101,二进制数据 (2)什么是内存? 内存条通电后产生的可存储数据的空间(临时的) 拓展: 1.2种数据 2.内存分类--栈和堆 ...

  10. AcWing 24. 机器人的运动范围

    习题地址 https://www.acwing.com/solution/acwing/content/2970/ 题目描述地上有一个 m 行和 n 列的方格,横纵坐标范围分别是 0∼m−1 和 0∼ ...