放大/缩小
多点触摸的动作,在新版本的java-client(6.1.0)没有对应的API
原理:用2根手指同时参与,需要用到MultiTouchAction对象
(1)java-client4.1.2版本有直接提供缩放的API-》直接调用zoom(x,y)即可
@Test
public void test() throws InterruptedException {
Thread.sleep(3000);
// 缩放【放大/缩小】
androidDriver.zoom(447, 824);// 要放大的坐标点,自己设置即可
}
(2) java-client4.1.2以上版本没有直接提供缩放的api-》解决办法:copy源代码,自定义缩放
代码如下:
package com.leom.day03;
import java.net.MalformedURLException;
import java.net.URL;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
import org.apache.tools.ant.types.resources.Touchable;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import io.appium.java_client.MultiTouchAction;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
public class ZoomTest {
public AndroidDriver androidDriver;
/**
* 初始化的一些操做就相等于是appium的检测器会话, 即:不通过检查器会话连接手机,而是通过代码代替客户端来连接手机设备
*/
@BeforeTest
public void setup() throws MalformedURLException {
// 1.实例化 DesiredCapabilities--》所需能力
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
// 2.添加手机配置
desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");// 设备名(值可以自己定义)
desiredCapabilities.setCapability("platformName", "Android");// 连接的设备是安卓平台
desiredCapabilities.setCapability("appPackage", "com.baidu.BaiduMap");// app包名
desiredCapabilities.setCapability("appActivity", "com.baidu.baidumaps.WelcomeScreen");// app启动入口
desiredCapabilities.setCapability("noReset", "true");
// 3.Appium服务连接地址
URL url = new URL("http://127.0.0.1:4723/wd/hub");
// 4.实例化AndroidDriver
androidDriver = new AndroidDriver(url, desiredCapabilities);
// 5.设置隐式等待
androidDriver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
}
@Test
public void test() throws InterruptedException {
Thread.sleep(3000);
// 缩放【放大/缩小】
// androidDriver.zoom(447, 824);// 要放大的坐标点,自己设置即可
myZoom();
myZoom();
}
/**
* 自定义缩放
*/
public void myZoom() {
// 1.获取屏幕的宽度(x轴)
int width = androidDriver.manage().window().getSize().getWidth();
// 2.获取屏幕的高度(y轴)
int height = androidDriver.manage().window().getSize().getHeight();
// 3.设置要放到的坐标点-》选择屏幕的中心点(将屏幕宽高都平均分成四份)
int centerx = width / 2;
int centery = height / 2;
// 4.第一根手指 终止点
int firstEndx = width / 4;
int firstEndy = height / 4;
// 5.第二根手指终止点
int secondEndx = width * 3 / 4;
int secondEndy = height * 3 / 4;
// 6.滑动时间
int duration = 500;
swipe( centerx, centery, firstEndx, firstEndy, secondEndx, secondEndy,
duration);
}
/**
* 自定义滑动
*/
public void swipe(int centerx, int centery, int firstEndx, int firstEndy, int secondEndx, int secondEndy,
int duration) {
// 6.实例化触摸对象TouchAction(两根手指都要滑动,所以需要实例化两个触摸对象
TouchAction firstAction = new TouchAction(androidDriver);
TouchAction secondAction = new TouchAction(androidDriver);
// 7.将中心点坐标转成PointOption类型
PointOption centerPoint = PointOption.point(centerx, centery);
// 8.将终止点坐标转成PointOption类型
PointOption firstPoint = PointOption.point(firstEndx, firstEndy);
PointOption senondPoint = PointOption.point(secondEndx, secondEndy);
// 9.将滑动时间转换成waitOptions类型
Duration duration2 = Duration.ofMillis(duration);
WaitOptions waitOptions = WaitOptions.waitOptions(duration2);
// 7.配置滑动的动作
firstAction.press(centerPoint).waitAction(waitOptions).moveTo(firstPoint).release();
secondAction.press(centerPoint).waitAction(waitOptions).moveTo(senondPoint).release();
// 8.两根手指同时生效
MultiTouchAction multiTouchAction = new MultiTouchAction(androidDriver);
multiTouchAction.add(firstAction);
multiTouchAction.add(secondAction);
//9.滑动生效
multiTouchAction.perform();
}
}
网友评论