Appium 记一次 appium 的使用体验

onesbyones · 2018年06月12日 · 1944 次阅读

因为项目组准备搞 UI 自动化,所以把已经 2 年没用过的 appium 捡起来重新看了看,在这里总结一下

环境准备

  1. adt安装包
  2. jdk环境
  3. ant编译环境(把生成的local.properties文件放到 clone 下来的bootstrap目录下)

增加权限弹框处理 watcher

appium_bootstrap 源码路径

更好的办法就是使用 adb 命令一次性把权限申请下来

步骤如下

  1. 入口:Bootstrap.java
package io.appium.android.bootstrap;
    ...

    SocketServer server;
    try {
      server = new SocketServer(4724);
      //入口
      server.listenForever(disableAndroidWatchers, acceptSSLCerts);
    } catch (final SocketServerException e) {
      Logger.error(e.getError());
      System.exit(1);
    }

    ...

SocketSever.java


//处理crash
dismissCrashAlerts();

final TimerTask updateWatchers = new TimerTask() {
@Override
public void run() {
  try {
    watchers.check();
  } catch (final Exception e) {
  }
}
};
timer.scheduleAtFixedRate(updateWatchers, 100, 100);
}

//证书弹框
if (acceptSSLCerts) {
    Logger.debug("Accepting SSL certificate errors.");
    acceptSSLCertificates();
}

  1. 根据上边提供的监听机制,新增一个,比如:SocketSever.java

public void dismissPermissionAlerts() {
  try {
    new UiWatchers().registerPermissonWatcher();
    Logger.debug("Registered permission watchers.");
  } catch (final Exception e) {
    Logger.debug("Unable to register permission watchers.");
  }
}

UiWatchers.java

//新增
public void registerPermissonWatcher() {
  UiDevice.getInstance().registerWatcher("PERMISSION", new UiWatcher() {
    @Override
    public boolean checkForCondition() {
      final UiObject window = new UiObject(new UiSelector()
          .resourceId("com.android.packageinstaller:id/permission_message"));
      if (window.exists()) {
        String errorText = null;
        try {
          errorText = window.getText();
        } catch (final UiObjectNotFoundException e) {
          // TODO: handle exception
          Log.e(LOG_TAG, "dialog gone?", e);
        }
        onPermissionDetected(errorText);
        postPermissionHandler();
        return true;
      }
      return false;
    }
  });
}

  1. ant 构建 jar 包:在bootstrap目录下,使用命令行 ant build

  2. 把生成的 jar 包替换掉 appium 安装目录下的:

    AppData\\Roaming\\npm\\node_modules\\appium\\node_modules\\_appium-android-bootstrap\@2.10.1\@appium-android-bootstrap\\bootstrap\\bin\\AppiumBootstrap.jar

    名字最好一样

输入框问题

因为我们的登录输入框,使用了稍微人性化的设计,所以使得在使用 appium 的键盘输入时,经常会丢失文本。比如:

然后试了下adb命令是不会丢失。好吧,看了下appium server的日志,发现可以用切换输入法来解决,不然用adb是不支持中文字符的。

方法如下

  1. 命令行获取默认输入法

adb shell settings get secure default_input_method

  1. 设置 appium 自带的输入法

adb shell ime enable io.appium.android.ime/.UnicodeIME

adb shell ime set io.appium.android.ime/.UnicodeIME

遗留问题

装了一最新版本的 appium,不知道为什么在去掉浮层的时候,会找不到原生的元素,后边再打算看看

共收到 0 条回复 时间 点赞
onesbyones 关闭了讨论 02月05日 08:41
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册