zoukankan      html  css  js  c++  java
  • 手机自动化测试:appium源码分析之bootstrap七

    手机自动化测试:appium源码分析之bootstrap七

     

       poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。poptest测试开发工程师就业培训请大家咨询qq:908821478)移动端自动化测试是未来的测试工程师的技术要求,我们需要打好基础。

    Drag

    package io.appium.android.bootstrap.handler;

    import com.android.uiautomator.core.UiDevice;

    import com.android.uiautomator.core.UiObjectNotFoundException;

    import io.appium.android.bootstrap.*;

    import io.appium.android.bootstrap.exceptions.InvalidCoordinatesException;

    import io.appium.android.bootstrap.utils.Point;

    import org.json.JSONException;

    import org.json.JSONObject;

    import java.util.Hashtable;

    /**

     * This handler is used to drag in the Android UI.

     *

     */

    public class Drag extends CommandHandler {

      /*

       * @param command The {@link AndroidCommand} used for this handler.

       *

       * @return {@link AndroidCommandResult}

       *

       * @throws JSONException

       *

       * @see io.appium.android.bootstrap.CommandHandler#execute(io.appium.android.

       * bootstrap.AndroidCommand)

       */

      private static class DragArguments {

        public AndroidElement el;

        public AndroidElement destEl;

        public final Point    start;

        public final Point    end;

        public final Integer  steps;

        public DragArguments(final AndroidCommand command) throws JSONException {

          final Hashtable<String, Object> params = command.params();

          try {

            if (params.get("elementId") != JSONObject.NULL) {

              el = command.getElement();

            }

          } catch (final Exception e) {

            el = null;

          }

          try {

            if (params.get("destElId") != JSONObject.NULL) {

              destEl = command.getDestElement();

            }

          } catch (final Exception e) {

            destEl = null;

          }

          start = new Point(params.get("startX"), params.get("startY"));

          end = new Point(params.get("endX"), params.get("endY"));

          steps = (Integer) params.get("steps");

        }

      }

      private AndroidCommandResult drag(final DragArguments dragArgs) {

        Point absStartPos = new Point();

        Point absEndPos = new Point();

        final UiDevice device = UiDevice.getInstance();

        try {

          absStartPos = getDeviceAbsPos(dragArgs.start);

          absEndPos = getDeviceAbsPos(dragArgs.end);

        } catch (final InvalidCoordinatesException e) {

          return getErrorResult(e.getMessage());

        }

        Logger.debug("Dragging from " + absStartPos.toString() + " to "

            + absEndPos.toString() + " with steps: " + dragArgs.steps.toString());

        final boolean rv = device.drag(absStartPos.x.intValue(),

            absStartPos.y.intValue(), absEndPos.x.intValue(),

            absEndPos.y.intValue(), dragArgs.steps);

        if (!rv) {

          return getErrorResult("Drag did not complete successfully");

        }

        return getSuccessResult(rv);

      }

      private AndroidCommandResult dragElement(final DragArguments dragArgs) {

        Point absEndPos = new Point();

        if (dragArgs.destEl == null) {

          try {

            absEndPos = getDeviceAbsPos(dragArgs.end);

          } catch (final InvalidCoordinatesException e) {

            return getErrorResult(e.getMessage());

          }

          Logger.debug("Dragging the element with id " + dragArgs.el.getId()

              + " to " + absEndPos.toString() + " with steps: "

              + dragArgs.steps.toString());

          try {

            final boolean rv = dragArgs.el.dragTo(absEndPos.x.intValue(),

                absEndPos.y.intValue(), dragArgs.steps);

            if (!rv) {

              return getErrorResult("Drag did not complete successfully");

            } else {

              return getSuccessResult(rv);

            }

          } catch (final UiObjectNotFoundException e) {

            return getErrorResult("Drag did not complete successfully"

                + e.getMessage());

          }

        } else {

          Logger.debug("Dragging the element with id " + dragArgs.el.getId()

              + " to destination element with id " + dragArgs.destEl.getId()

              + " with steps: " + dragArgs.steps);

          try {

            final boolean rv = dragArgs.el.dragTo(dragArgs.destEl.getUiObject(),

                dragArgs.steps);

            if (!rv) {

              return getErrorResult("Drag did not complete successfully");

            } else {

              return getSuccessResult(rv);

            }

          } catch (final UiObjectNotFoundException e) {

            return getErrorResult("Drag did not complete successfully"

                + e.getMessage());

          }

        }

      }

      @Override

      public AndroidCommandResult execute(final AndroidCommand command)

          throws JSONException {

        // DragArguments is created on each execute which prevents leaking state

        // across executions.

        final DragArguments dragArgs = new DragArguments(command);

        if (command.isElementCommand()) {

          return dragElement(dragArgs);

        } else {

          return drag(dragArgs);

        }

      }

    }

    首先来看DragArguments对象。该类为Drag中的私有类,它的构造方法回去解析传入的command,然后获得并存储一些drag方法用到的参数。例如拖拽控件时,被拖拽的控件对象,拖拽到的控件对象。坐标拖拽时,起始点坐标、终点坐标、步骤。所以就把它看成一个实体类就行了。然后分控件和坐标分别调用dragElement()和drag()方法。

    dragElement()

    如果拖拽到的控件不存在,那么就要用到结束坐标。如果拖拽到的控件存在,那么就用该控件计算拖拽到坐标,调用UiObject.dragTo()方法来执行命令。

    drag()

    直接调用UiObject.dragTo来执行

  • 相关阅读:
    LeetCode——Generate Parentheses
    LeetCode——Best Time to Buy and Sell Stock IV
    LeetCode——Best Time to Buy and Sell Stock III
    LeetCode——Best Time to Buy and Sell Stock
    LeetCode——Find Minimum in Rotated Sorted Array
    Mahout实现基于用户的协同过滤算法
    使用Java对文件进行解压缩
    LeetCode——Convert Sorted Array to Binary Search Tree
    LeetCode——Missing Number
    LeetCode——Integer to Roman
  • 原文地址:https://www.cnblogs.com/poptest/p/4949922.html
Copyright © 2011-2022 走看看