Appium Appium 在指定控件内做上下滑动

米阳MeYoung · 2015年03月26日 · 最后由 含泪若冰 回复于 2018年06月29日 · 3195 次阅读

那天写了个 控件内点击指定位置:http://testerhome.com/topics/2247

今天重新改了下,对控件内的滑动,如下控件我需要在控件里面滑动,选取:

具体代码如下(目前只做滑动一次,有需要可以自己再做修改,如果有更好方式操作,求推荐):

/**
     * 控制滑动方向
     */
    public enum Heading {
        UP, DOWN
    }

    /**
     * 控件内上下滑动
     *
     * @param step    测试步骤
     * @param by      控件定位方式
     * @param heading 滑动方向 UP  DOWN
     */
    public void swipeControl(String step, By by, Heading heading) {
        // 获取控件开始位置的坐标轴
        Point start = this.findElement(driver, by).getLocation();
        int startX = start.x;
        int startY = start.y;

        // 获取控件坐标轴差
        Dimension q = this.findElement(driver, by).getSize();
        int x = q.getWidth();
        int y = q.getHeight();
        // 计算出控件结束坐标
        int endX = x + startX;
        int endY = y + startY;

        // 计算中间点坐标
        int centreX = (endX + startX) / 2;
        int centreY = (endY + startY) / 2;

        switch (heading) {
            // 向上滑动
            case UP:
                driver.swipe(centreX, centreY + 30, centreX, centreY - 30, 500);
                break;
            // 向下滑动
            case DOWN:
                driver.swipe(centreX, centreY - 30, centreX, centreY + 30, 500);
                break;
        }
        log.info(step);
    }
共收到 10 条回复 时间 点赞

有个小问题,你滑动的坐标是centreY +- 30,这里的 30 应该可以通过计算得到(比如通过控件高度来计算滑动一个元素所需要滑动的距离),而不需要作为固定值写在方法里吧?
当然,如果你只有这个控件需要用到这个方法,写在里面问题应该也不大。

#1 楼 @chenhengjie123 嗯,完全可以的。

#2 楼 @shijin880921 为什么不用 float 来代替分辨率?这样会更好

话说这个能不能做到判断我选的年龄值滑动,一直到年龄的值为 15 的时候我就停止

我已经知道怎么去实现了。

#5 楼 @trex 分享下你代码看看。

#6 楼 @shijin880921

driver.scrollToExact

不会是这个方法吧
我的想法是滑动一屏,查找一次,找不到,再滑到一屏继续查找

#4 楼 @trex 每次划好去取一次 text 吗

具体怎么取@neyo

刘少 回复

@trex
同问,我的想法也是算出每一次滑动的距离,然后循环判断
但是我的测试场景这个元素是一个 view,怎么才能取到里面的 text?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册