一、webdriver的实现原理
webdriver原理是经典的Server-Client架构(C/S)
这里讲到的是脚本和浏览器的交互,client端开始运行驱动浏览器的脚本的时候,这是浏览器收到请求开始启动并开启侦听端口(80),并自动创建session,保持浏览器和对应客户端的会话连接,然后客户端运行脚本,向浏览器发送http请求,浏览器解析请求,根据脚本内容做出相应操作,返回response。这时client端根据response选择结束还是继续执行。
- webdriver操作浏览器、页面采用的协议:the webdriver wire protocol
- Client和Server的通信协议:HTTP
- HTTP传输的数据内容为遵循WP协议json格式数据
二、appium的工作原理
appium的原理也是C/S架构的形式,appium本身就是一个远程服务器,appium中的Json wire protocol继承自selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能够控制不同的移动设备的行为。
当开启appium服务器的同时就开启了监听端口;我们运行脚本的时候,调用任何的appiumAPI,都会向Appium Server端post一条HTTP请求,请求内容就是根据webdriver wire protocol协议规定的一条JSON格式的数据;Appium Server端接收到请求后,解析出JSON数据并发送到手机端;手机端上已经由BootStrap.jar(iOS为BootStrip.js)开启的socket服务器监听相应的端口,BootStrap.jar在appium每个session第一次访问手机端的时候会自动安装;手机端接收到对应的请求后,通过BootStrap.jar翻译成UIAutomator能执行的命令,然后通过UIAutomator处理并操作APP完成测试。
appium在Android的工作原理
-
client端也就是我们 test script是我们的webdriver测试脚本。
-
中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。
-
appium server会把请求转发给中间件Bootstrap.jar ,它是用java写的,安装在手机上.Bootstrap监听4724端口并接收appium 的命令,最终通过调⽤用UiAutomator的命令来实现。
-
最后Bootstrap将执行的结果返回给appium server。
-
appium server再将结果返回给 appium client。
appium在ios的工作原理
在IOS端,appium同样使⽤WebDriver的一套协议。与Android端测试框架不同的是,appium ios封装了apple的 Instruments框架,主要用了Instrument里的UI Automation(Apple的自动化测试框架),然后在设备中注⼊入bootstrap.js进行监听。
-
client端 依然是 test script是我们的webdriver测试脚本。
-
中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。
-
appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互
-
最后Bootstrap.js将执行的结果返回给appium server
-
appium server再将结果返回给 appium client。
android与ios区别在于appium 将请求转发到bootstrap.js或者bootstrap.jar.然后由bootstrap 驱动UIAutomation和UiAutomator去devices上完成具体的动作。