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文件并返回给客户端。

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

  • 相关阅读:
    自学入门 Python 优质中文资源索引
    Crawlab Lite 正式发布,更轻量的爬虫管理平台
    一款被大厂选用的 Hexo 博客主题
    源码解读 Golang 的 sync.Map 实现原理
    探究 Go 语言 defer 语句的三种机制
    一道快速考察 Python 基础的面试题
    编写自己的 GitHub Action,体验自动化部署
    Python 2 与 3 共存了 11 年,新年就要和它道别
    30 年前的圣诞节,Python 序章被谱写
    文言文编程火了,可我完全学不懂
  • 原文地址:https://www.cnblogs.com/poptest/p/4953533.html
Copyright © 2011-2022 走看看