selenium和appium内部原理总结为什么会有这篇文章?前段时间学习了selenium的使用,今天开始接触appium看到appium的原理后产生了疑惑:现在的selenium是通过webdriver来操作驱动浏览器的,然而appium有一个server的概念那么为什么没有app driver这个东西呢?selenium早期的selenium早期的selenium主要是指selenium1.0的版本,这个版本主要由Selenium IDE + Selenium Grid + SeleniumRC组成seleniumRC就是后来被webdriver取代的一个代理serverRC == Remote Control 远程控制早期Selenium 引入了 Remote Control Server 这样一个代理 Server,JavaScript 脚本注入和与 Server 通讯都通过这个代理 Server 来进行,JavasScript可以获取并调用页面的任何元素,Selenium启动一个Server,将操作Web元素的API调用转化为一段段JavaScript,在Selenium内核启动浏览器之后注入这段JS缺点:但是JS注入速度不理想,稳定性大大依赖于Selenium内核对API翻译成的JS质量高低引入代理Remote Control Server是因为“同源策略”的限制,通过这个代理服务器来“欺骗”远程Server,达到使其以为是从同一个地方load代码以正确返回请求数据的效果seleniumRC的原理Selenium RC Server 启动一个浏览器(或是已经使用中),并注入js代码将测试脚本代码传到客户端的 Selenium-Core 中Selenium-Core 翻译并解析执行用户录制的操作让代理 Server 进行通讯Remote Control Server 负责跟远程 Web 应用服务器进行通讯seleniumRC的组成Selenium Server(Launcher、Http Proxy、Selenium Core)Client Libraries(用来控制server)seleniumRC的工作流程测试用例通过Client Libraries的接口向Selenium Server发送Http请求,要求和Selenium Server建立连接Selenium Server的Launcher启动浏览器,把Selenium Core加载入浏览器页面中,并发浏览器的代理设置为Selenium Server的Http Proxy。测试用例通过Client Libraries的接口向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作Selenium Core接收到指令后,执行操作浏览器收到新的页面请求信息,于是发送Http请求,请求新的web页面。Selenium Server会接收到所有由它启动的浏览器发动的请求Selenium Server接收到浏览器发送的Http请求后,自己重组Http请求,获取对应的web页面Selenium Server的Http Proxy把接收的Web页面返回给浏览器现在的seleniumselenium3.0以后移除了seleniumRC,取而代之的是webdriver用一张图来展示selenium3.0的运行原理这里讲到的是测试脚本和浏览器的交互,客户端开始运行驱动浏览器的脚本的时候,这时浏览器收到请求开始启动并开启侦听端口,并自动创建session,保持浏览器和对应客户端的会话连接,然后客户端运行脚本,向浏览器发送http请求,浏览器解析请求,根据脚本内容做出相应操作,返回response。这时客户端根据response选择结束还是继续执行tips:webdriver操作浏览器、页面采用的协议:the webdriver wire protocolClient和Server的通信协议:HTTPHTTP传输的数据内容为遵循WP协议json格式数据浏览器驱动实现了webdriver协议的apiappiumappium和selenium之间的不同appium本身就是一个server,而selenium废弃了server,用webdriver来驱动浏览器appium工作原理当开启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的几个概念appium/appium server一般所说的appium其实是一个基于node.js的web服务器,它是测试脚本和设备端交互的桥梁用npm install -g appium 安装的是命令行的没有界面的appium serverappium GUI它是把没有界面的appium server封装出了一个图形界面,方便操作,但是现在已经被appium desktop所取代appium Desktop它是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供appium server的强大功能appium client第1点中说到,appium其实是一个sweb server,server是接收请求来操作设备端的app的,既然有了server那么一定会有client这个client就是我们写测试脚本时导入的包python中可以运行 pip install Appium-Python-Client 来安装Android 和 iOS