Appium appium 的技术架构

cmlanche · 2019年04月11日 · 最后由 cmlanche 回复于 2019年07月08日 · 7156 次阅读

appium 是基于 nodejs 来打包、发布的,也用它来管理各个 driver,如下图所示,它的结构图如下:

image-20190411154231747

从上图就可以看到:android 的自动化比 iOS 的要难多了!

appium 主程序,依赖各个 driver 程序,其中,安卓的自动化有 3 个 driver,分别是:

  1. appium-android-driver - 用于驱动 UIAutomator1
  2. appium-uiautomator2-driver - 用于驱动 UIAutomator2
  3. appium-espresso-driver - 用于驱动 Espresso

列个表对比一下:

功能\Driver appium-android-driver appium-uiautomator2-driver appium-espresso-driver
用途 驱动 UIAutomator1 驱动 UIAutomator2 驱动 espresso
automationName UiAutomator1 UiAutomator2 Espresso
包形式 AppiumBootstrap.jar appium-uiautomator2-server-v${version}.apk TODO 待研究
包依赖地址 bootstrap/bin/ appium-uiautomator2-server/apks/ TODO
优点 jar 包形式,免安装,一个命令直接启动,权限级别是 shell 级别 官方推荐使用 2,对高版本兼容性好 控件识别能力强
缺点 对高版本兼容性差,容易无法识别控件 apk 形式,需要安装 apk 形式,需求安装,并且是侵入式的,可能带来风险
Server 模块 在相同工程中,Bootstrap 目录,maven 工程,主要目标是在 bin 目录下输出 AppiumBootstrap.jar 不同工程,单独的另外一个 Nodejs 工程:appium-uiautomator2-server 相同 Nodejs 工程,espress-server 目录,gradle 工程

附:AppiumBootstrap.jar 的打包过程:https://zhuanlan.zhihu.com/p/61213093

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 27 条回复 时间 点赞
1楼 已删除

low

很不错的分享,期待楼主持续更新

对 文贤平 回复

谢谢,但是感觉没人看,感觉国内深度研究 appium 的很少,绝大多数都是浅层次的使用,UIAutomator1、UIAutomator2、espresso 都区分不了,更是用不上

赞!支持楼主!

虽然看不懂但是支持楼主

其实实施起来最复杂的是 iOS,环境搭建难。而且选择的余地少,只有 WDA

对 codeskyblue 回复

这方面确实是,不过 iOS 设备少,适配方面好弄点

感谢分享

太久没用 appium 了,现在都集成了 espresso?

仅楼主可见

如果文章再完整一些,可以加个精华

对 Dorom 回复

控件没找到,最后超时了吧

对 Dorom 回复

desired_caps ["automationName"] = "uiautomator2" 改为 UiAutomator2

题主可以建个群,一起交流下

棒棒棒呢,楼主,几个问题
1、所以 appium 会根据真实的安卓版本选择不同的驱动是吗?
2、所以我们可以直接调用 AppiumBootstrap.jar,跟 UIAutomator1 是一样的?这个 jar 包有对外提供接口吗?
3、nodejs 是怎么和驱动交互的,第一种驱动是个 jar 包,nodejs 是怎么调用的呢?

对 Karaser 回复
  1. 是的
  2. 可以直接调用,一样,有提供接口,但不建议使用,直接使用 appium 就好
  3. 跟驱动使用无非就是在指定位置找 jar 或者 apk 包,安装使用
对 jsonxia 回复

没有精力维护

12楼 已删除

老深入了,国内应该没几个人比我更了解了

之前在 testin,对这俩货做了深入的改造

大神你好有个问题请教一下,百度查了很多都没找到解决办法。
appium 父元素通过 findElements(By.xpath("//android.view.View")) 获取到的元素集合是所有子孙元素,怎样才能只获取子元素不获取孙元素?

对 zhouxiaofu 回复

关键还是 xpath 写的有问题吧,可以直接打开一个 chrome 网页,模拟调试,看怎样的 xpath 是只获取你所说的子元素,屏蔽孙元素(我也不会写😀 )

30楼 已删除

博客:https://cmlanche.com
知乎专栏:https://zhuanlan.zhihu.com/custom-appium 自定义 appium,你都可以关注

对 cmlanche 回复

嗯,好久没来了,谢谢

楼主能给初步开始学习 appium 的小白一些学习方法、步骤的建议吗? 感谢!

appium 自身有很多问题,我都准备弃了,有能力就自己开发。

当用来学习 ui 自动化技术还是不错的范例,学习建议就是要先了解 UIAutomator 的原理和适用性,其他技术方案如 Robotium、espresso 等都要吃透原理,知道各种不同的技术能测什么不能测什么

至于小白现在是什么水平,还不太清楚,我也不知道你们掌握什么样的程度就可以完成自动化任务,我之前在 testin,做的 UI 自动化面向的是任何 app,它面临的问题的复杂程度是很难的,因为你得去兼容任何 app,任何手机,绝大部分公司做 UI 自动化根本不需要像 testin 这样考虑这么多,做自己家的 APP 的自动化可以有很多独特手段来规避一些业界难题。

对 cmlanche 回复

感谢老师的回复。现在我还不具备自己开发工具的能力。 现在的需求不会像 testin 那样兼容很多 app 和机型,只需要把公司目前的几款 app 的主流程跑起来。
我先按照老师说的,先去了解下基本的工作原理。
目前的困惑是:写个脚本跑起来没什么困难,就是想封装些通用的方法,写成更灵活、通用的框架形式,这方面不知道如何下手。

用开源框架有个通病,就是有些框架自身就有问题,无论你外部怎么封装,都是无法克服的。

当然封装也是一个必要做的事情,如果发现封装无法解决,那么就要考虑是不是它本身就有问题了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。