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中变量时需要加变量名 正确 < ...
随机推荐
- PIE SDK图像重采样算法
1.算法功能简介 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像.重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图 ...
- Linux进程管理(11)
进程介绍: 1.在Linux中,每个执行的程序(代码)都称为一个进程.每一个进程都分配一个ID号. 2.每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程. 3.每个进程都有两种方式存在: ...
- 踩坑ios H5
目录 input获取焦点时,页面被放大 ios input输入时白屏 软键盘撑起页面下不来 ios页面滚动不流畅 position:fixed/absolute随屏幕滚动 1.input获取焦点时,页 ...
- WorkFlow三:配BO对象,事件触发工作流
1.新建个BO对象的字段. 2.新建取数函数: 3.运行事物代码SWO1新建BO对象. 4.新建关键字段: 5.新建BO对象的事件: 6.添加处理方法: 6.调整对象状态,这里是本地对象,不需要释放, ...
- B端产品经理的金字塔能力模型
工作这几年,时长思考,作为B端产品经理自己应该具备什么样的能力? 虽然工作依旧在有条不紊的进行,但是时常会陷入到对知识或者能力的焦虑当中.特别时是工作三五年,产品经理进阶门槛时. 虽然产品经理的能力是 ...
- 给easyui datebox扩展一个清空按钮,无侵入
/** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.ext ...
- linux部署django项目流程(全)
1.python3和python2共存配置 流程在下面网址中 https://www.cnblogs.com/vinic-xxm/p/11358894.html 2.安装依赖包 yum install ...
- Redis内存模型(1):内存统计及划分
1. 内存统计 查看命令:info memory 示例: 部分含义: used_memory: Redis分配器分配的内存总量(单位是字节),包括使用的虚拟内存. used_memory_rss: R ...
- Shell 编程 文本处理工具 sed
本篇主要写一些shell脚本文本处理工具sed的使用. 概述 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除.替换.添加 ...
- pyTorch 基于以resnet50为backbone的PSPNet 训练VOC2012数据集
代码链接:https://github.com/ggyyzm/pytorch_segmentation 使用PSPNet作为主干分类网络 1.将VOC2012数据集下载并解压到data/VOCtrai ...