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(...png) 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();
1 操作
shakebabe 在 2020-08-06 17:42:01 更新了该帖
3 回帖
请输入回帖内容 ...
  • Aprilqxm

    老师写的很详细,赞,看完恍然大悟

  • 其他回帖
  • shakebabe
  • xiaofeng

    变来变去