zoukankan      html  css  js  c++  java
  • 手机自动化测试: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文件并返回给客户端。

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

  • 相关阅读:
    rapidjson 使用
    【设计模式】模板方法模式
    【设计模式】策略模式
    【设计模式】建造者模式
    【设计模式】享元模式
    /dev/sda1 contains a file system with errors,check forced.
    如何编写高效的Python的代码
    VsCode 调试 Python 代码
    Python 使用 pyinstaller 打包 代码
    初次使用git上传代码到github远程仓库
  • 原文地址:https://www.cnblogs.com/poptest/p/4953533.html
Copyright © 2011-2022 走看看