【Appium+java】实现鼠标上下左右滑动(三)

一、前提

因为使用的Appium是7以后的版本,所以以前的driver.swipe方法不能使用

老版本

最开始的使用API中swipe()方法,通过获取坐标来滑动页面,当我们使用最新appium的java的jar包编写代码是,返现swipe()方法无法找到,查看API和资料发现该方法已经去掉

新版本

而替代者就是TouchAction对象,它是针对手势的一些操作,如滑动页面,按压屏幕,长按,拖动,移动等(可自行查看)

二、实现鼠标上下左右滑动的方法封装

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import org.openqa.selenium.By;

import java.time.Duration;


/**
 * 工具类
 * Appium 实现上下、左右滑动页面 只适用于Appium 1.6.4及以下
 * 1.7 driver.swipe方法不能用了
 */
public class AppiumUtils {
 
    /**
     * 向上滑动
     * 第一个坐标(x / 2,8 * y / 10):控制x轴在屏幕的中间点和y轴按压屏幕的坐标
     * 第二个坐标(x / 2, y / 5):控制x轴在屏幕的中间点和y轴向上滑动的坐标停留点
     * @param driver
     * @param durtion 下一次滑动的时间
     */
    public static void swipeToUp(AndroidDriver<AndroidElement> driver, long durtion) {
        //获取手机屏幕的宽度
        int x = driver.manage().window().getSize().getWidth();
        //获取手机屏幕的高度
        int y = driver.manage().window().getSize().getHeight();
        new TouchAction(driver).press(PointOption.point(x / 2, 8 * y / 10))
                .waitAction(WaitOptions.waitOptions(Duration.ofSeconds(durtion)))
                .moveTo(PointOption.point(x / 2, y / 5)).release().perform();
    }

    /**
     * 向下滑动
     * @param driver
     * @param durtion 下一次滑动的时间
     */
    public static void swipeToDown(AndroidDriver<AndroidElement> driver, long durtion) {
        //获取手机屏幕的宽度
        int x = driver.manage().window().getSize().getWidth();
        //获取手机屏幕的高度
        int y = driver.manage().window().getSize().getHeight();
        new TouchAction(driver).press(PointOption.point(x / 2, y / 5))
                .waitAction(WaitOptions.waitOptions(Duration.ofSeconds(durtion)))
                .moveTo(PointOption.point(x / 2, 8 * y / 10)).release().perform();

    }

    /**
     * 向左滑动

     * @param driver
     * @param durtion 下一次滑动的时间
     */
    public static void swipeToLeft(AndroidDriver<AndroidElement> driver, Long durtion) {
        //获取手机屏幕的宽度
        int x = driver.manage().window().getSize().getWidth();
        //获取手机屏幕的高度
        int y = driver.manage().window().getSize().getHeight();
        new TouchAction(driver).press(PointOption.point(8 * x / 10, y / 2))
                .waitAction(
                        WaitOptions.waitOptions(Duration.ofSeconds(durtion)))
                .moveTo(PointOption.point(x / 10, y / 2)).release().perform();

    }

    /**
     * 向左滑动

     * @param driver
     * @param durtion 下一次滑动的时间
     */
    public static void swipeToRight(AndroidDriver<AndroidElement> driver, Long durtion) {
        //获取手机屏幕的宽度
        int x = driver.manage().window().getSize().getWidth();
        //获取手机屏幕的高度
        int y = driver.manage().window().getSize().getHeight();
        new TouchAction(driver).press(PointOption.point(x / 10, y / 2))
                .waitAction(
                        WaitOptions.waitOptions(Duration.ofSeconds(durtion)))
                .moveTo(PointOption.point(8 * x / 10, y / 2)).release().perform();

    }

 }

三、使用方法

import com.appium.driver.AppiumUtils;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import java.net.URL;

public class TestSwipe {
    private AndroidDriver<AndroidElement> driver;

    @BeforeTest
    public  void init() throws Exception {
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.DEVICE_NAME, "zhihu");
        //指定测试平台
        cap.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
        //指定测试机的ID,通过adb命令`adb devices`获取
        cap.setCapability(MobileCapabilityType.UDID, "127.0.0.1:62001");
        cap.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, "com.zhihu.android");
        cap.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, "com.zhihu.android.app.ui.activity.LauncherActivity");

        driver = new AndroidDriver<AndroidElement>(
                new URL("http://127.0.0.1:4723/wd/hub"), cap);
    }

    @Test
    public void testSwipe() {
        AppiumUtils.swipeToLeft(driver,500L);
    }

}

注意:如果你的滑动不生效也不报错,这个时候可能是滑动坐标之间的距离不够,或者滑动的时候起始点被其他元素挡住了

滑动的时候可能出现超出边界的错误,或者是一个不知道的异常,在滑动之前我们需要等待几秒钟的时间

原因:在界面切换的过程中,如果界面切换的比较慢,这个时候代码是不会等待界面而直接执行代码,这个时候在执行滑动代码,这个时候界面正在执行切换,所以需要等待界面切换完成。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页