美文网首页
app手势操做

app手势操做

作者: testerPM | 来源:发表于2020-03-21 16:45 被阅读0次

    (1)滑动

    java-client6.1.0没有提供滑动的api
    解决办法:切换java-client版本(4.1.2)-【该版本是不支持坐标定位的api】

        @Test
        public void test() throws InterruptedException {
            Thread.sleep(3000);
            //1.滑动
            //startx,starty滑动起始坐标
            //endx,endy滑动终止坐标
            //duration->需要滑动多久时间,单位是毫秒
            androidDriver.swipe(432, 619, 401, 1166, 500);
             
            
        }
    
    
    

    上图代码中的坐标如何获取?-》手机设置-》打开开发者选择-》打开指针位置-》打开要滑动的app页面,鼠标定位即可

    image.png

    切换版本虽然实现了滑动,但是版本切换,低版本没有坐标点击的api的,会导致其他类当中使用到坐标点击api报错--》解决办法:不切换java client版本,copy低版本中的滑动源代码,然后自己自定义

    package com.leom.day03;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.time.Duration;
    import java.util.concurrent.TimeUnit;
    
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.Test;
    
    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 SwipeTest {
        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.lemon.lemonban");// app包名
            desiredCapabilities.setCapability("appActivity", "com.lemon.lemonban.activity.WelcomeActivity");// 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);
            // 1.滑动
            // startx,starty滑动起始坐标
            // endx,endy滑动终止坐标
            // duration->需要滑动多久时间,单位是毫秒
            // java-client4.2.1版本提供了swipe()方法可以直接调用,但是高版本是没有这个api的
            // 解决办法:查看swipe()方法的源代码,将源代码copy出来,自己自定义个滑动方法
            // androidDriver.swipe(432, 619, 401, 1166, 500);
            mySwipe(432, 619, 401, 1166, 500);
        }
    
        /**
         * 自定义滑动方法
         */
        public void mySwipe(int startx, int starty, int endx, int endy, int duration) {
            /*
             * java-client4.1.2版本滑动的源代码, TouchAction touchAction = new
             * TouchAction(this); touchAction.press(startx,
             * starty).waitAction(duration).moveTo(endx, endy).release();
             * touchAction.perform();
             */
    
            // 1.实例化触摸动作对象
            TouchAction touchAction = new TouchAction(androidDriver);
            // 2.将原始坐标转化成PointOption类型(java client高版本不能直接传坐标值)
            PointOption startPoint = PointOption.point(startx, starty);
            PointOption endPoint = PointOption.point(endx, endy);
            // 3.把原始时间转换成WaitOptions类型的(原始时间是毫秒,所以调用ofMillis()
            Duration duration2 = Duration.ofMillis(duration);
            WaitOptions waitOptions = WaitOptions.waitOptions(duration2);
            // 4.配置滑动的动作
            touchAction.press(startPoint).waitAction(waitOptions).moveTo(endPoint).release();
            //5.让滑动生效
            touchAction.perform();
    
        }
    
    }
    
    
    

    上述代码中的坐标是通过手动获取的,下面通过手机屏幕获取滑动坐标

    
    
    @Test
        public void test() throws InterruptedException {
            Thread.sleep(3000);
            // 1.滑动
            // startx,starty滑动起始坐标
            // endx,endy滑动终止坐标
            // duration->需要滑动多久时间,单位是毫秒
            // java-client4.2.1版本提供了swipe()方法可以直接调用,但是高版本是没有这个api的
            // 解决办法:查看swipe()方法的源代码,将源代码copy出来,自己自定义个滑动方法
            // androidDriver.swipe(432, 619, 401, 1166, 500);
    
            swpieDown();
        
        }
    
        /**
         * 自定义滑动方法
         */
        public void mySwipe(int startx, int starty, int endx, int endy, int duration) {
            /*
             * java-client4.1.2版本滑动的源代码, TouchAction touchAction = new
             * TouchAction(this); touchAction.press(startx,
             * starty).waitAction(duration).moveTo(endx, endy).release();
             * touchAction.perform();
             */
    
            // 1.实例化触摸动作对象
            TouchAction touchAction = new TouchAction(androidDriver);
            // 2.将原始坐标转化成PointOption类型(java client高版本不能直接传坐标值)
            PointOption startPoint = PointOption.point(startx, starty);
            PointOption endPoint = PointOption.point(endx, endy);
            // 3.把原始时间转换成WaitOptions类型的(原始时间是毫秒,所以调用ofMillis()
            Duration duration2 = Duration.ofMillis(duration);
            WaitOptions waitOptions = WaitOptions.waitOptions(duration2);
            // 4.配置滑动的动作
            touchAction.press(startPoint).waitAction(waitOptions).moveTo(endPoint).release();
            // 5.让滑动生效
            touchAction.perform();
    
        }
    
        /**
         * 自定义向下滑动(不用手动设置坐标了)
         */
        public void swpieDown() {
            // 获取屏幕的高度和宽度
            // 高度是Y轴,宽度是X轴
            int height = androidDriver.manage().window().getSize().getHeight();
            int width = androidDriver.manage().window().getSize().getWidth();
            // 设置起始坐标(这个值是自己设置的,你想从哪个位置开始滑动,自己定义即可
            int startx = width / 2;
            int starty = height / 4;
            // 设置终止坐标(这个值也是自己定义的,设置原则:保证x轴不变,Y轴终止endy大于起始starty即可
            int endx = width / 2;
            int endy = height * 3 / 4;
            // 设置滑动时间
            int duration = 500;
            mySwipe(startx, starty, endx, endy, duration);
    
        }
    
    
    

    相关文章

      网友评论

          本文标题:app手势操做

          本文链接:https://www.haomeiwen.com/subject/sequyhtx.html