• tap其实就是click,看源码:

    register(postHandler, new Click("/wd/hub/session/:sessionId/appium/tap"));
    public class Click extends SafeRequestHandler {

    public Click(String mappedUri) {
    super(mappedUri);
    }

    @Override
    protected AppiumResponse safeHandle(IHttpRequest request) throws JSONException,
    UiObjectNotFoundException {
    JSONObject payload = getPayload(request);
    if (payload.has(ELEMENT_ID_KEY_NAME)) {
    Logger.info("Click element command");
    String id = payload.getString(ELEMENT_ID_KEY_NAME);
    Session session = AppiumUIA2Driver.getInstance().getSessionOrThrow();
    AndroidElement element = session.getKnownElements().getElementFromCache(id);
    if (element == null) {
    return new AppiumResponse(getSessionId(request), WDStatus.NO_SUCH_ELEMENT);
    }
    element.click();
    } else {
    Logger.info("tap command");
    Point coords = new Point(Double.parseDouble(payload.get("x").toString()),
    Double.parseDouble(payload.get("y").toString()));
    coords = PositionHelper.getDeviceAbsPos(coords);
    final boolean res = getUiDevice().click(coords.x.intValue(), coords.y.intValue());
    return new AppiumResponse(getSessionId(request), res);
    }
    Device.waitForIdle();
    return new AppiumResponse(getSessionId(request), true);
    }
    }
  • 是的,appium使用UIAutomator的时候其实还是调用UIDevice来做click的,它会参考clickable这个值去,如果是false,那就失败了。可以改appium-android-driver中bootstrap的代码,click都基于坐标去点击,就是复杂点

  • 是的,类似UIAutomatorviewer,因为espresso获取到的控件信息和UIAutomator的不一样了

  • UIAutomator只是appium中的一种技术方案,espresso和UIAutomator是同一层次的东西,你可以去了解下

  • 最佳的方式当然是改造appium啦,就跟监控权限框一样,参考我testerhome专栏,但这个方案应该不适合你,比较复杂。我推荐是写在脚本中,开一个线程去做这件事。

  • Author only
  • 不定时出现的弹框写个监控去做,全流程测试过程中每隔几秒检测一次(异步)

  • 方案1:如果是用espresso来做的话,这个叉叉是可以准确识别的,没有识别不到的情况
    方案2:native识别+图像识别互相补充去识别这个叉叉,兼容性取决于图像识别的能力,难度较高
    方案3:相对识别,先找到上面的大控件,再往下找这个叉叉

  • 查找算法是算法,但native控件的话,你只能基于UIAutomator,你们或许用了辅助功能,利用accessbilityService来做,但兼容性跟UIAutomator是一样的,UIAutomator背后的原理也是它。非侵入式的控件定位,绕不过accessbilityService,那就绕不过兼容性

  • 对于solopi,我的疑问有几点:

    1. 识别控件的兼容性怎样?
      native控件定位采用的是UIAutomator1或者2来识别,兼容性是很差的,尤其对h5页面特别差,而基于chrome dev tools protols可以弥补,因为它其实本质是类似webui的测试,是js取控件的,所以会比较准,但要使用这个技术,要么这个webview是x5内核(手动开启调试),要么就是自己应用开启debug调试模式,才能去做。至于基于图像来识别,看了相关的视频,感觉还不错,我之前在testin做过一段时间,简单的还是比较好识别的,但图像不具备特色就比较难识别,并且在不同手机上,图片颜色可能都不太一样,对上百台设备乃至上千台设备,识别控件的准确度会怎样?不知道有没有实际测试过验证过。图像识别在我看来只是一个补充。

    2. 一机多控稳定性怎样?
      看着是通过socket连不同的手机,有主从之分,这个socket会不会被系统干掉导致连接断开

    3. 能否支持持续集成?
      这个很重要,有没有一个方式提测让设备随时能够执行任务,能否配合Jenkins做定时任务呢?

    虽然有很多疑问,但我还是觉得solopi是一个很不错的工具,在无线自动化上的探索已经做的很好了(虽然我不认为无线自动化是一种很好的方式)

前云测自动化研发高级开发工程师,负责app自动化技术研发和难题攻关,有深刻的UIAutomator、Robotium、自定义脚本和执行等经验,目前钻研自定义Appium,欢迎关注我的知乎专栏:https://zhuanlan.zhihu.com/custom-appium