Appium appium 的技术架构

cmlanche · April 11, 2019 · Last by cmlanche replied at July 08, 2019 · 2592 hits

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 条回复 时间 点赞
1Floor has been deleted

low

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

文贤平 回复

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

赞!支持楼主!

虽然看不懂但是支持楼主

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

codeskyblue 回复

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

感谢分享

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

Dorom · #11 · April 25, 2019
Author only

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

cmlanche #13 · April 29, 2019 作者
Dorom 回复

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

cmlanche #14 · April 29, 2019 作者
Dorom 回复

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

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

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

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

没有精力维护

19Floor has been deleted
cmlanche #20 · May 08, 2019 作者

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

cmlanche #21 · May 08, 2019 作者

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

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

cmlanche #23 · May 08, 2019 作者
zhouxiaofu 回复

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

24Floor has been deleted
cmlanche #25 · May 17, 2019 作者

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

cmlanche 回复

嗯,好久没来了,谢谢

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

cmlanche #28 · July 05, 2019 作者

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

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

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

cmlanche 回复

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

cmlanche #30 · July 08, 2019 作者

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

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up