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


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

     

      

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

    UpdateStrings

    package io.appium.android.bootstrap.handler;

    import io.appium.android.bootstrap.AndroidCommand;

    import io.appium.android.bootstrap.AndroidCommandResult;

    import io.appium.android.bootstrap.CommandHandler;

    import io.appium.android.bootstrap.Logger;

    import java.io.DataInputStream;

    import java.io.File;

    import java.io.FileInputStream;

    import org.json.JSONObject;

    /**

     * This handler is used to update the apk strings.

     *

     */

    public class UpdateStrings extends CommandHandler {

      /**

       * strings.json文件保存的是apk的strings.xml里的内容,在Bootstrap启动前由appium服务器解析并push到设备端的

       *

       * @return

       */

      public static boolean loadStringsJson() {

        Logger.debug("Loading json...");

        try {

          final String filePath = "/data/local/tmp/strings.json";

          final File jsonFile = new File(filePath);

          // json will not exist for apks that are only on device

          // 你的case必须写明apk的路径,如果启动设备上已有的应用而case中没有app路径,此时json文件是不存在的

          // because the node server can't extract the json from the apk.

          if (!jsonFile.exists()) {

            return false;

          }

          final DataInputStream dataInput = new DataInputStream(

              new FileInputStream(jsonFile));

          final byte[] jsonBytes = new byte[(int) jsonFile.length()];

          dataInput.readFully(jsonBytes);

          // this closes FileInputStream

          dataInput.close();

          final String jsonString = new String(jsonBytes, "UTF-8");

          // 将读取出来的信息赋给Find类中的属性,以做后用

          Find.apkStrings = new JSONObject(jsonString);

          Logger.debug("json loading complete.");

        } catch (final Exception e) {

          Logger.error("Error loading json: " + e.getMessage());

          return false;

        }

        return true;

      }

      /*

       * @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) {

        if (!loadStringsJson()) {

          return getErrorResult("Unable to load json file and update strings.");

        }

        return getSuccessResult(true);

      }

    }

    在appium初始化的时候,如果你代码中添加了app应用,而不是启动手机设备中已经有的应用,这时候appium会将该app解析,并提取出设备当前语言环境的strings.xml文件里的信息保存在strings.json里,并将其push到手机的/data/local/tmp目录下,当你想要获取应用中用到的字符串时,手机会去该目录下读取strings.json文件并返回给客户端。

    所以上面的代码也就是我上面说的过程。

  • 相关阅读:
    WebSocket
    使用fiddler将网站上的css js重定向至本地文件
    chrome浏览器调试线上文件映射本地文件
    xul 创建一个按钮
    模板小程序】求小于等于N范围内的质数
    哈希-------开放寻址法-------暴雪哈希
    建造者模式(build pattern)-------创造型模式
    抽象工厂模式(abstract factory pattern)------创造型模式
    工厂模式(factory pattern) ------创造型模式
    文件名中含有连续字符abc,相应文件中也含有字符串abc
  • 原文地址:https://www.cnblogs.com/poptest/p/4953533.html
Copyright © 2020-2023  润新知