• 手机自动化测试:appium源码分析之bootstrap十三


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

     

      

    poptest(www.poptest.cn)是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478。

    Wake

    package io.appium.android.bootstrap.handler;

    import android.os.RemoteException;

    import com.android.uiautomator.core.UiDevice;

    import io.appium.android.bootstrap.AndroidCommand;

    import io.appium.android.bootstrap.AndroidCommandResult;

    import io.appium.android.bootstrap.CommandHandler;

    /**

     * This handler is used to power on the device if it's not currently awake.

     *

     */

    public class Wake 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)

       */

      @Override

      public AndroidCommandResult execute(final AndroidCommand command) {

        // only makes sense on a device

        try {

          UiDevice.getInstance().wakeUp();

          return getSuccessResult(true);

        } catch (final RemoteException e) {

          return getErrorResult("Error waking up device");

        }

      }

    }

    wake事件为唤醒手机,有的时候手机处于睡眠状态就需要点亮屏幕,如果此时屏幕就是亮的,那么不做任何操作。

    PressBack

    package io.appium.android.bootstrap.handler;

    import com.android.uiautomator.core.UiDevice;

    import io.appium.android.bootstrap.AndroidCommand;

    import io.appium.android.bootstrap.AndroidCommandResult;

    import io.appium.android.bootstrap.CommandHandler;

    /**

     * This handler is used to press back.

     *

     */

    public class PressBack 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)

       */

      @Override

      public AndroidCommandResult execute(final AndroidCommand command) {

        UiDevice.getInstance().pressBack();

        // Press back returns false even when back was successfully pressed.

        // Always return true.

        return getSuccessResult(true);

      }

    }

    在手机上的返回键。

     

    TakeScreenshot

     

    package io.appium.android.bootstrap.handler;

    import com.android.uiautomator.core.UiDevice;

    import io.appium.android.bootstrap.AndroidCommand;

    import io.appium.android.bootstrap.AndroidCommandResult;

    import io.appium.android.bootstrap.CommandHandler;

    import java.io.File;

    /**

     * This handler is used to TakeScreenshot.

     *

     */

    public class TakeScreenshot 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)

       */

      @Override

      public AndroidCommandResult execute(final AndroidCommand command) {

        final File screenshot = new File("/data/local/tmp/screenshot.png");

        try {

          screenshot.getParentFile().mkdirs();

        } catch (final Exception e) {

        }

        if (screenshot.exists()) {

          screenshot.delete();

        }

        UiDevice.getInstance().takeScreenshot(screenshot);

        return getSuccessResult(screenshot.exists());

      }

    }

    截屏并将图片保存在/data/local/tmp路径下的screenshot.png文件中。

    OpenNotification

    package io.appium.android.bootstrap.handler;

    import com.android.uiautomator.core.UiDevice;

    import io.appium.android.bootstrap.AndroidCommand;

    import io.appium.android.bootstrap.AndroidCommandResult;

    import io.appium.android.bootstrap.CommandHandler;

    import static io.appium.android.bootstrap.utils.API.API_18;

    /**

     * This handler is used to open the notification shade on the device.

     *

     */

    public class OpenNotification extends CommandHandler {

      /*

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

       *

       * @return {@link AndroidCommandResult}

       *

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

       * bootstrap.AndroidCommand)

       */

      @Override

      public AndroidCommandResult execute(final AndroidCommand command) {

        // method was only introduced in API Level 18

        if (!API_18) {

          return getErrorResult("Unable to open notifications on device below API level 18");

        }

        // does not make sense on an element

        if (command.isElementCommand()) {

          return getErrorResult("Unable to open notifications on an element.");

        }

        final UiDevice device = UiDevice.getInstance();

        if (device.openNotification()) {

          return getSuccessResult(true);

        } else {

          return getErrorResult("Device failed to open notifications.");

        }

      }

    }

    打开通知栏操作,api18以后在UiDevice中添加了openNotification()方法,打开通知栏。所以该事件就是去调用该方法。

  • 相关阅读:
    Docker部署LAMP搭建wordpress博客系统
    Docker教程---基本操作
    华为VS网络虚拟化技术
    云数据中心基础设施层概述
    EVE-NG模拟器关联SecureCRT、Wireshark软件
    Centos7.4安装openstack(queens)cinder卷类型和云主机安全
    围观大神的文件读取操作
    浅谈python垃圾回收机制
    Python网络爬虫开发实战使用XPath,xpath的多种用法
    快来学习怎么可视化监控你的Python爬虫
  • 原文地址:https://www.cnblogs.com/poptest/p/4953263.html
Copyright © 2020-2023  润新知