前段时间由于想把自己开源的测试平台LuckyFrame集成移动端的自动化测试,所以选择了Appium,然后把Appium的JAVA客户端更新到java-client 6.0.0-BETA2,发现其中有关于界面滑动(swipe TouchAction)方面的升级(也有可能在之前的版本已经更新过类似的内容,没仔细看),跟以前旧版本的使用方法不太一样。
新版本的java-client已经取消swipe方法,以前在老版本中使用这个方法的同学都可以忘记他了,所以可以改用TouchAction的方法替代界面滑动,但是同时我也发现,很多TouchAction类中的很多老方法也都已经弃用,具体可以参考这边的官方说明文档:
https://static.javadoc.io/io.appium/java-client/6.0.0-BETA2/io/appium/java_client/TouchAction.html
大概说一下,以前直接使用int类型(XY轴)去定位还有用到Duration类型的方法,基本全部废弃了,现在都改用类似下面这种方式,也就是使用了PointOption.point(X坐标, Y坐标),目前看到的能使用的API只有下面的几个了,其实是整个API蛮得更加简洁了。
坐标长按
拖动
按住坐标
持续时间
点击坐标
具体代码如下:
怎么去初始化TouchAction
AndroidTouchAction action = new AndroidTouchAction(driver);
点击如下坐标
action.press(PointOption.point(23, 22))
点击如下坐标,持续N秒
int nanos=(int) (second*1000);
Duration duration = Duration.ofNanos(nanos);
action.press(PointOption.point(23, 22)).waitAction(WaitOptions.waitOptions(duration))
下面是Android示例拖动当前页面向下滚动,亲测通过,如果是IOS,估计也只是把AndroidTouchAction 换成IOSTouchAction而已,没有测试IOS,有兴趣的同学可以试试:
int nanos=(int) (1.5*1000);
Duration duration = Duration.ofNanos(nanos);
int width = ad.manage().window().getSize().width;
int height = ad.manage().window().getSize().height;
AndroidTouchAction action = new AndroidTouchAction(ad);
action.press(PointOption.point(width/2, height*3/4)).waitAction(WaitOptions.waitOptions(duration)).moveTo(PointOption.point(width/2, height/4)).release().perform();
上述代码用到的moveTo方法,我在使用中也碰到问题,如果只需要拖动一次的时候,是没有问题的。但是当我连续几次拖动时,坐标的数值出现了问题。
比如代码:
AndroidTouchAction action = new AndroidTouchAction(ad);
action.press(PointOption.point(300, 700)).waitAction(WaitOptions.waitOptions(duration)).moveTo(PointOption.point(150, -250)).waitAction(WaitOptions.waitOptions(duration)).moveTo(PointOption.point(-250, 150)).release().perform();
如下图所示:当连续几次moveTo时,传入的坐标不再是相对坐标了,而是前一个坐标的偏移坐标。
按照API文档,moveTo方法说明,里面的坐标就是相对坐标,所以这里是否是API的一个BUG?或是故意为之?有待后续版本的验证了。
有使用连续moveTo的要注意别掉坑里面了。