注意事项 翻译:我翻译了这篇文章,以帮助那些在测试自动化方面迈出第一步并希望了解更多有关Appium工具的人。 它描述了Appium驱动程序的一般操作原理,以及它们的类型和用途。 在旅程的开始,许多测试人员缺乏有条理的信息,而这些材料将有助于确定正确工具的选择。
Appium是一个跨平台工具,可让您同时自动执行移动(iOS和Android)和桌面应用程序的测试。 实现此多平台模型的方法是使用各种驱动程序。 本质上,Appium具有与Selenium WebDriver大致相同的体系结构,后者还使用大量独立的驱动程序来支持跨浏览器测试自动化。
针对不同的自动化工具,有单独的Appium驱动程序,这通常意味着每个平台都使用一个驱动程序(一个用于iOS,一个用于Android等)。 但是,也有例外。 它们与以下事实有关:在某些平台(例如,对于Android)的测试应用程序自动化中,有几种工具与Appium结合使用。 实际上,Android有三种驱动程序:基于UiAutomator,UiAutomator 2和Espresso。
司机的工作原理
驱动程序可能是整个工具中最重要的组件,因为驱动程序的任务是在特定平台上执行Appium API(称为WebDriver协议)的命令。 本质上,驱动程序是将Appium客户端代码转换为可以在iOS,Android等设备上执行命令的转换器。
出于架构简化等原因,每个单独的驱动程序本身都是独立的WebDriver兼容服务器(尽管它没有主Appium服务器具有的所有选项)。 在驱动程序内部,接收到的命令以特殊方式处理。 例如,可以将它们转移到在Android设备上运行Java代码的单独进程中。
驱动程序本身具有相当复杂的内部体系结构,有时基于多种技术。 下图显示了XCUITest驱动程序(当前的iOS驱动程序)所涉及的技术堆栈:

如您所见,XCUITest驱动程序的原理并不是那么简单。 它是Appium的一部分,可在您启动iOS会话时启动。 在驱动程序内部,它使用另一个称为WebDriverAgent的工具,该工具负责将WebDriver协议命令转换为XCUITest库调用。
尽管最终每个驱动程序都可以实现自己的驱动程序,但许多驱动程序都具有相似的体系结构,因为最终该驱动程序作为继承Appium BaseDriver类的类发布在npm中。 这使驱动程序可以轻松连接到Appium。
驱动程序类型
那么那里有多少个司机? 老实说,很难确定,因为除了Appium的官方驱动程序外,还有非官方的驱动程序。 但是,如果我们查看Appium的源代码,则会看到以下内容:
const AUTOMATION_NAMES = { APPIUM: 'Appium', UIAUTOMATOR2: 'UiAutomator2', UIAUTOMATOR1: 'UiAutomator1', XCUITEST: 'XCUITest', YOUIENGINE: 'YouiEngine', ESPRESSO: 'Espresso', TIZEN: 'Tizen', FAKE: 'Fake', INSTRUMENTS: 'Instruments', WINDOWS: 'Windows', MAC: 'Mac', };
自动化名称是Appium使用的各种驱动程序的键。 此部分代码确定允许将哪些行用作AutomationName功能的值。 每个驱动程序通常仅支持一个平台。 这是根据每个驱动程序的AutomationName的简要说明:
- Appium只是指向所选平台的默认驱动程序的指针,而不是单独的驱动程序。
- UiAutomator2( 资源库 )-Android平台的当前驱动程序,默认使用,基于Google UiAutomator工具;
- UiAutomator1( 存储库 )是基于旧版UiAutomator的旧版Android驱动程序。 将来将不支持该驱动程序,因此最好放弃该驱动程序而改用UiAutomator2。
- XCUITest( 存储库 )-iOS的默认驱动程序,基于Apple XCUITest工具;
- YouiEngine( 存储库 )-来自You.i Labs开发人员的驱动程序,用于对基于其SDK创建的各种平台的应用程序测试进行自动化;
- Espresso( 存储库 )-基于Google Espresso工具的最新Android驱动程序;
- Tizen( 存储库 )-三星开发人员提供的驱动程序,用于自动测试Tizen OS中使用的基于Xamarin的应用程序;
- Fake(名称不言而喻)被用作Appium的内部测试工具。 您将永远不必使用它。
- Instruments( repository )-用于iOS 9.3及更低版本的应用程序的过时驱动程序;
- Windows( 存储库 )-微软组装了一个与Appium兼容的服务器,称为WinAppDriver,该驱动程序将其连接到主Appium服务器。 直接设计用于自动化Windows桌面应用程序;
- Mac( 存储库 )-一种驱动程序,可让您自动测试Mac的桌面应用程序。
如前所述,这些驱动程序中的每一个都有其自己的体系结构,可以通过查看以下图表来看到:

司机常见问题
那么您如何知道要使用哪个驱动程序?
好吧,如果您需要
为iOS,Windows,Mac或Tizen的应用程序编写
自动测试 ,则选择很明显-为每个平台使用默认驱动程序。 对于Android,在这里您必须在UiAutomator2和Espresso之间进行选择。 最好事先了解每种工具,并了解哪种工具最适合您的情况。 UiAutomator2和Espresso驱动程序的功能相似,但并不完全相同。
所有驱动程序是否均等地支持相同命令?是的,没有。 从根本上说,我们受到平台提供商提供的自动化功能的限制。 在Android设备上点击可以与iOS设备上的点击相同。 但是执行其他命令的过程可能会有所不同。 Appium开发人员尽可能尝试确保不同平台上的驱动程序行为相同。
我可以从一个驱动程序切换到另一个驱动程序,并期望测试失败吗?是的,没有。 这完全取决于我们在谈论什么驱动程序。 使用Appium的优点之一是,您可以从一种自动化工具切换到另一种自动化工具(例如,从UiAutomator2到Espresso),而无需牺牲现成的测试套件。 但是,您应该缓慢而有条理地进行迁移,确保一切都按预期进行。 Appium团队有时会发布从一个驱动程序迁移到另一个驱动程序的迁移准则-在迁移之前,您应该注意它们。
我可以创建自己的驱动程序吗?是的 许多人已经做到了这一点,特别是
Jason Huggins和
I (在AppiumConf 2019上)。 但是,还有其他专有的驱动程序,例如
Christian Broman的hbbtv 驱动程序 。
驱动程序会在Appium 2.0中发生变化吗?这是一个很好的问题! Appium驱动程序系统的负面影响之一是它们都包含在Appium服务器依赖项中。 但是,我们正在努力确保驱动程序存在于一个不太紧密的系统中,您可以在其中选择与Appium一起使用的特定驱动程序。 如果您解决了此问题,则在仅使用Appium来运行iOS测试时,不必安装旧的UiAutomator2驱动程序并连接其依赖项。 (您知道有
关于开发Appium 2.0的
建议吗?)
希望本文对您有所帮助。 我很高兴阅读有关您使用Appium驱动程序的经验的评论。