为了满足第二条,我们把这些第三方框架封装成一套API,WebDriver(也就是"Selenium
WebDriver")指定了客户端到服务端的协议。(参见JSONWireProtocol)。使用这种客户端-
服务端的架构,我们可以使用任何语言来编写客户端,向服务端发送恰当的HTTP请求。
目前大多数流行语言版本的客户端已经实现了,这意味着你可以使用任何测试套件或者测试
框架。通过这种服务端-客户端的架构,使用任意语言编写的客户端库都可以用来发送这些
http请求来与Appium服务器交互。换句话说,Appium和WebDriver客户端不是技术意义上
的“测试框架”,而是“自动化库”。你可以在你的测试环境中随意使用这些自动化库!
事实上WebDriver已经成为web浏览器自动化的标准,也成了W3C的标准——W3C
WorkingDraft。我们又何必为移动做一个完全不同的呢?所以我们扩充了WebDriver的协
议,在原有的基础上添加移动自动化相关的API方法,这也满足了第三条理念。
第四条就不用说了,Appium是开源的。
Appium概念
C/S架构
Appium的核心是一个web服务器,它提供了一套REST的接口。它收到客户端的连接,监
听到命令,接着在移动设备上执行这些命令,然后将执行结果放在HTTP响应中返还给客户
端。事实上,这种客户端/服务端的架构给予了许多的可能性:比如我们可以使用任何实现了
该客户端的语言来写我们的测试代码。比如我们可以把服务端放在不同的机器上。比如我们
可以只写测试代码,然后使用云服务来执行命令。
Session
自动化始终围绕一个session进行,客户端初始化一个seesion(会话)来与服务端交互,不同
的语言有不同的实现方式,但是他们最终都是发送为一个POST请求给服务端,请求中包含一
个JSON对象,被称作“desiredcapabilities”。此时,服务端就会开启一个自动化的session,
然后返回一个sessionID,sessionID将会被用户发送后续的命令。
DesiredCapabilities
Desiredcapabilities是一些键值对的集合(比如,一个map或者hash),客户端将这些键值
对发给服务端,告诉服务端我们想要怎么测试。比如,我们可以把 platformName这个
capability设置为 iOS,告诉Appium服务端,我们想要一个iOS的session,而不是一个
Android的。我们也可以设置 safariAllowPopups这个capability为 true,确保在Safari自
动化session中,我们可以使用javascript来打开新窗口。
AppiumServer
Appiumserver是用Node.js编写的一个服务器。我们可以用源码编译或者从NPM直接安
装。