Appium 点击指定控件的某个位置

米阳MeYoung · 2015年03月25日 · 最后由 小园 回复于 2017年01月22日 · 2734 次阅读

今天遇到一个问题,想要点击某个控件的某个位置(左上,左下,右上,右下,中间),稍微做了封装,具体代码如下,有不妥欢迎指出:

/**
 * 单个手指,点击屏幕某个控件位置(左上,左下,右上,右下,中间)
 */
public enum Location {
    UPLEFT, LOWLEFT, UPRIGHT, LOWRIGHT, CENTRE
}

/**
 * 点击控件某个地方
 *
 * @param step
 * @param by
 * @param location
 */
public void clickControl(String step, By by, Location location) {
    log.info(step);
    // 获取控件开始位置的坐标轴
    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;

    switch (location) {
        // 左上 点击
        case UPLEFT:
            driver.tap(1, startX + 10, startY + 10, 100);
            TaquTools.sleep(2);
            break;
        // 右上 点击
        case UPRIGHT:
            driver.tap(1, endX - 10, startY + 10, 100);
            TaquTools.sleep(2);
            break;
        // 左下 点击
        case LOWLEFT:
            driver.tap(1, startX + 10, endY - 10, 100);
            TaquTools.sleep(2);
            break;
        // 右下 点击
        case LOWRIGHT:
            driver.tap(1, endX - 10, endY - 10, 100);
            TaquTools.sleep(2);
            break;
        // 中间 点击
        case CENTRE:
            driver.tap(1, (endX + startX) / 2, (endY + startY) / 2, 100);
            TaquTools.sleep(2);
            break;
    }
}
共收到 5 条回复 时间 点赞
7楼 已删除

不错,支持一下

不错,不过想了解一下为何 tap 完需要固定等待 2 秒呢?是因为业务需要?

@chenhengjie123 好问题!从设计来说最好操作和等待相分离,由调用者决定何时等待以及如何等待,如果一个方法提供的是一个原子操作的话

#3 楼 @chenhengjie123 不是因为业务,我在写这个时,刚开始根本没去用等待,但是调试通过,跑剧本就正常,索性我添加等待 2S,报错就没了。 so,,,大伙帮忙看看为嘛?

感谢分享。

米阳MeYoung Appium 在指定控件内做上下滑动 中提及了此贴 03月08日 11:15
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册