selenium下载地址统计:
chromedriver:http://chromedriver.storage.googleapis.com/index.html?path=2.31/
geckodriver: https://github.com/mozilla/geckodriver/releases
一.selenium框架结构
selenium 分为三大架构:SeleniumIDE、Selenium WebDriver、Selenoium Grid
- Selenium IDE:录制和回放脚本,可以模拟用户对页面的真实操作,区别于其他工具:是通过拦截http请求。
- 一般只把录制脚本当作一个辅助功能,因为一个UI节点的细微变化,都可能导致自动化测试工具无法识别,当测试项目项目大时,定位、更新十分困难。
- 其次,录制的脚本有时候人工难以理解。
- Selenium Grid:实现在多台机器上、和异构环境中并行执行测试用例。并行执行不仅节省时间,而且可以同时在不同的浏览器、平台上运行自动化测试脚本。
- Selenium Web Driver:针对各个浏览器而开发,通过原生浏览器支持或者扩展(Chrome webDrive、FireFox WebDriver)直接控制浏览器
VS Selenium RC(Selenium1.0):在浏览器中运行javaScript,使用浏览器内置的JavaScript来翻译和执行selense
二、selenium运行机制,(基于firefox)
为了方便讲解,下面将会基于firefox进行讲解。
2.1 基础知识
1.浏览器内核
“浏览器内核”主要指渲染引擎(Rendering Engine),负责解析网页语法(如HTML、JavaScript)并渲染、展示网页。因此,所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解析也有所不同,因此同一网页在不同的内核浏览器里的渲染、展示效果也可能不同。
浏览器内核种类繁多,商用的加上非商业的免费内核,大约会超过10款,目前主流的四大浏览器内核Trident、Gecko、WebKit以及Presto。Gecko就是firefox的内核。
2.Marionette
Marionette是Mozilla的Gecko引擎的自动化驱动程序。它可以远程控制Gecko平台(如Firefox)的UI或内部JavaScript。它可以控制chrome(即菜单和功能)或内容(浏览上下文中加载的网页),提供高水平的控制和复制用户操作的能力。除了在浏览器上执行操作之外,Marionette还可以读取DOM的属性和属性。
3.geckodirver
geckodriver是Selenium FirefoxDriver的下一代。它是由Marionette支持的Geodo / Firefox远程协议。使用W3C WebDriver协议兼容客户端与基于Gecko的浏览器交互的代理。可见:它是充当本地和远程之间的代理,并将呼叫转换为Firefox远程协议。
2.2 selenium运行机制-----webDdriver模式
webDriver是按照client/server模式设计的。client是我们的测试脚本,发送请求;server就是打开的浏览器,用来接收client的请求并作出响应。
具体的工作流程:
- webDriver调用geckodriver程序打开浏览器并绑定到指定端口。启动的浏览器作为远程服务器remote server
- client通过CommandExecuter json 一段字符串给远程服务器的侦听端口(the wire protocal)
- 远程服务器根据原生的浏览器组件将字符串转化为浏览器的本地(native)调用
所以web Driver用到的协议:
- 打开浏览器时:HTTP协议
- client端发送json请求到远程服务器的侦听端口:the wire protocol
其中:
- 有线协议:指的是从点到点获取数据的方式,是应用层的协议。
- HTTP协议:是用于从服务器传输超文本标记语言HTML到客户端的通信协议。是一个应用层协议,由请求/响应构成,是一个标准的客户/服务器模式。是一个无状态的协议。(无状态:对事务没有记忆能力,不会保存这次传输的信息——节约内存)