appium java常用函数_Appium最新的Java client库废弃了swipe等函数后,用TouchAction实现各种手势操作...

前言

更新了最新的Appium java-client库 io.appium:java-client:5.0.4,对着官方文档找函数,发现一些文档上写的函数,在代码里敲不出来,像下面这几个

http://appium.io/slate/en/master/?java#swipe

SWIPE

Simulate a user swipe.

// java

driver.swipe(75, 500, 75, 0, 0.8)

PINCH

Pinch the screen.

// java

driver.pinch(element);

ZOOM

Zoom the screen.

// java

driver.zoom(element);

后来查了文档补充部分,还有Appium官方论坛,才发现好多旧的手势函数都废除了,JavaScript方式执行“mobile:XXX”的方式也没了,现在需要用TouchAction和MultiTouchAction的方式来实现这些手势操作了。废弃的内容官方文档里没有完全更新。

https://discuss.appium.io/t/some-of-the-methods-from-mobileelement-and-appiumdriver-class-missing-in-5-0-4/19039/2

ee909e3a63f84d769dd2e431388ce15a.png

http://appium.io/slate/en/master/?java#no-more-execute_script-quot-mobile-xxx-quot

0154becc4f313aa0e11c4ba501cfc7a5.png

TouchAction实现滑动操作

TouchAction有press(), longPress(), moveTo(),release() 等基础操作函数,但是没有封装好的点击tap(), 滑动swipe()等,要实现这些必须将操作分解,如点击tap就是press+release,滑动swipe则是press+move to+release,中间也可以加必要的等待。

下面以我之前写的笑话应用为例,说明下滑动操作的实现,代码如下:

Listjokes = new ArrayList<>();

jokes = driver.findElementsByXPath("//android.support.v7.widget.RecyclerView/android.widget.FrameLayout");

AndroidElement firstJoke = jokes.get(0);

AndroidElement lastJoke = jokes.get(jokes.size()-2);

new TouchAction(driver).press(lastJoke).waitAction(Duration.ofSeconds(1)).moveTo(firstJoke).release().perform();

首先通过xPath找到当前页面中的笑话列表,取出第一个和倒数第二个笑话的Element(为什么不是最后一个,因为最后一个可能被底部导航挡住了)。

然后执行一系列的操作,首先new一个TouchAction对象,构造函数的参数是之前创建的WebDriver,然后按住最后一个笑话元素,等待1秒后,移动到第一个的位置,再释放按压,最后别忘了执行perform()。这样就完成了一个滑动操作了。

press()和moveTo()函数有好几种 overload形式。

press:

press(WebElement element),按压element中心位置

press(int x, int y),按压坐标(x,y)处

press(WebElement element, int x, int y),按压element偏移(x,y)的位置

moveTo也有相似的3种形式,但要注意,moveTo中的坐标(x,y)都是相对位置。

moveTo(WebElement element),移动到element的左上角

moveTo(int x, int y),从press的位置移动偏移量(x,y)

moveTo(WebElement element, int x, int y),移动到element偏移(x,y)的位置

MultiTouchAction实现多点触控

对于多点触控,如捏小或者放大,则还需要MultiTouchAction来实现。

MultiTouchAction有两个方法,add(TouchAction action)和perform()。实现的就是将多个TouchAction添加进来,在执行perform()后同时执行这些操作,实现多点触控操作。

以放大(zoom)操作为例,zoom其实可以理解成两个同时进行的反向swipe操作,swipe的方向为从element的中心下外。根据这个原理,可以通过将两个TouchAction添加到MultiTouchAction中来实现放大操作。为了更好的看到效果,我们在一个画图的app来看看效果,代码如下:

@Test public void test() {

sleep(5000);

WebElement drawBoard = driver.findElementById("org.vv.drawing.board:id/ll_drawing");

zoom(drawBoard);

}

private void zoom(WebElement element) {

int centerX = element.getLocation().getX()+element.getSize().getWidth()/2;

int centerY = element.getLocation().getY()+element.getSize().getHeight()/2;

TouchAction left = new TouchAction(driver).press(centerX-50,centerY)

.waitAction(Duration.ofSeconds(2)).moveTo(- element.getSize().getWidth()/4,-element.getSize().getHeight()/4).release();

TouchAction right = new TouchAction(driver).press(centerX+50, centerY)

.waitAction(Duration.ofSeconds(2)).moveTo(element.getSize().getWidth()/4,element.getSize().getHeight()/4).release();

new MultiTouchAction(driver).add(left).add(right).perform();

}

创建两个TouchAction,一个从中间向左上角滑动,一个从中间向右下角滑动,添加到MultiTouchAction中,同时操作,就是放大操作了。

效果图:

84584e95b230e891ca927eb58ee8c685.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值