JAVA_Selenium(一)原理

一、功能

1、测试与浏览器的兼容性,测试应用程序能否兼容工作在不同浏览器和操作系统之上

2、测试系统功能:录制用例自动生成测试脚本,用于回归功能测试或者系统用例说明

二、各版本及实现原理

1、Selenium 1.x :Selenium IDE + Selenium Grid + SeleniumRC

(1)介绍

传统Selenium框架,支持多种编程语言脚本生成,但需要启动一个代理Server来处理用户与测试Server之间的通讯

(2)实现机制

早期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代码以正确返回请求数据的效果

(3)Selenium Remote Control的执行原理

客户端建立与 selenium-RC server 的连接。
Selenium RC Server 启动一个浏览器(或是已经使用中),并注入 JS 代码
将 Selenese 代码传到客户端的 Selenium-Core 中。
Selenium-Core 翻译并解析执行用户录制的操作。
让代理 Server 进行通讯
Remote Control Server 负责跟远程 Web 应用服务器进行通讯。
操作完成,显示结果,并执行下一指令
2、Selenium 2.x: :Selenium+WebDriver

(1)介绍

Selenium+WebDriver,利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏、窗口大小。。。。)

优点:使用浏览器原生API,速度大大提供,调用的稳定性交给了浏览器厂商,更加的科学

缺点:对Web元素的操作和呈现会有一些差异,SeleniumWebDriver要分浏览器厂商不同提供不同的实现

(2)实现机制

不同的浏览器WebDriver子类都需要依赖特定的浏览器原生组件

在new 一个WebDriver的过程中,selenium会确认浏览器的native component是否存在可用而且版本匹配,接着在目标浏览器里启动一整套Web Service,这套Web Service使用了Selenium自己设计定义的协议,叫做The Web Driver Wire Protocol,几乎可以操作浏览器做任何事情

WebDriver wire协议是通用的(1)启动之后都会在某一个端口启动这套协议的WebService,例如FirefoxDriver初始化成功之后,默认会从http://localhost:7055开始,而ChromeDriver则大概是http://localhost:46350之类的。(2)接下来调用WebDriver的任何API,都需要借助一个ComandExecutor发送一个命令,实际上一个HTTP request给监听端口上的Web Service,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium希望浏览器接下来做什么事

(3)实现流程

针对不同浏览器开发的,不同的浏览器有不同的webdriver,测试代码中包含了各种期望的对浏览器界面的操作,测试代码通过给WebDriver发送指令,让WebDriver知道想要做的操作,而WebDriver根据这些操作在浏览器界面上进行控制,由此测试代码达到了在浏览器界面上操作的目的

3、Selenium 3.x : Selenium 2.0 + Selenium RC(Remote Control)

增加了新特性

selenium3需要的java最低版本是java8
selenium3启动火狐也需要像其他浏览器一样安装驱动了,驱动名叫geckodriver。
从Selenium核心的安装包中彻底删除了Selenium RC
如果需要run从IDE转化过来的用例,需要单独安装leg-rc的package
支持在MacOS上使用Safari了
转载:https://blog.csdn.net/languolan/article/details/81664966

你可能感兴趣的:(JAVA_UI自动化)