Selenium的发展历史及原理
目录
本文链接: https://www.cnblogs.com/hchengmx/p/10745116.html
1. selenium1.0的产生
为什么要有selenium?
因为一位ThoughtWorks的工程师,因为要重复操纵某些元素,设计出来selenium1.0, 此时selenium 1.0 = Selenium IDE + Selenium Grid + Selenium RC, 其中Selenium RC = Client Libraries + Selenium Serve, Selenium Clinet用于编写测试脚本, Selenium Server用来控制浏览器行为;
这时候的工作流程为(以Java为例):
- Selenium Client用Java来写Selenium代码;
Selenium user = new DefaultSelenium( " localhost " , SeleniumServer.DEFAULT_PORT, " *iexplore " , " http://localhost:8080 " );
user.start(); //启动浏览器
user.open( " /helloworld " );
user.click( " //a[contains(@href, 'user.do?id=0')] " );
- Selenium Server将编写的Java代码转换成一段浏览器能看懂的JS代码
- 浏览器根据JS实现相关操作
这样做有两个好处:
- 可以用一套代码来驱动所有的浏览器;
- 通过设置代理的方式突破了JS的安全机制(不允许访问跨域请求),
这样做的不好的点:
- 代码执行的效率很大程度上决定于Selenium Server转换的JS的代码的质量;
- 浏览器也对JS有很多的限制;
2. webdriver的产生
- 2006年, Webdriver是由Google工程师开发的,WebDriver是通过原生浏览器支持或者浏览器拓展来控制浏览器, 取代了嵌入web的JavaScript(此处提到了JavaScript的沙箱机制,突破JavaScript的安全模型),除了来自浏览器厂商的支持外(也就是直接控制浏览器进行直接沟通), WebDriver还利用操作系统级别的调用, (什么操作系统级别的调用?) , 模拟用户输入。
3. selenium和webdriver的合并
- 2009年, Selenium和WebDriver合并,也就是现在用的Selenium2. Webdriver也就有了一个清晰的API,也就是Webdriver API。此时 selenium 2.0 = Selenium 1.0 + Webdriver, 还是兼容selenium 1.0的, 这个时候不同浏览器的驱动方式不同, chrome用的是chromedriver, 其他有的是用selenium RC, 有的是用第三方开发的driver;
所以这个时候, 针对不同的浏览器, 导入的包是不一样的, 可能是selenium包,也有可能的webdriver包
from selenium import selenium,
from selenium import webdriver
4. selenium3.0的产生
selenium 3.0 = selenium 2.0 - selenium RC
selenium3.0是selenium2.0的优化, 最大的变化是 产生了协议 The WebDriver Wire Protocol这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等等等等。

所以: 当我们用代码
Chromedriver driver= new Chromedriver();
driver.get("http://www.google.com");
时,系统完成了以下的操作:
- 确定请求的浏览器是否存在?还有版本是否匹配。
- 启动一个Web Service,这个Service使用了Selenium定义的The WebDriver Wire Protocol协议,这个协议对于不同浏览器是通用的,所以这也就是同一套代码可以在不同浏览器中运用的运行。
- 向浏览器发送一个get请求,请求完成浏览器的跳转;
参考引用:
本文希望对您有所帮助,如何问题可联系我的个人微信
![]()
Selenium的发展历史及原理的更多相关文章
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- 秒懂Vuejs、Angular、React原理和前端发展历史
「前端程序发展的历史」 「 不学自知,不问自晓,古今行事,未之有也 」 我们都知道现在流行的框架:Vue.Js.AngularJs.ReactJs,已经逐渐应用到各个项目和实际应用中,它们都是MVVM ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- python 学习之电脑的发展历史
电脑的发展历史 电脑的学名叫计算机,电脑是用来做计算的.在古时候,人们最早使用的计算工具可能是手指,英文单词“digit”既有“数字”的意思,又有“手指“的意思.古人用石头打猎,所以还有可能是石头来辅 ...
- 【转载】Web开发技术发展历史-版本1
原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...
- attention发展历史及其相应论文
这个论文讲述了attention机制的发展历史以及在发展过程的变体-注意力机制(Attention Mechanism)在自然语言处理中的应用 上面那个论文提到attention在CNN中应用,有一个 ...
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系
CentOS版本历史 版本 CentOS版本号有两个部分,一个主要版本和一个次要版本,主要和次要版本号分别对应于RHEL的主要版本与更新包,CentOS采取从RHEL的源代码包来构建.例如CentOS ...
- .net版本发展历史
最近装上了VS2013,发现好多新特性.新功能,公司办公还在使用VS2005.VS2008,不过用着也很顺手,在最新版Visual Studio中,微软加入了git源码管理工具,和之前的TFS大体上类 ...
- 软件项目发展历史<人月神话>这本书好
几乎是计算机软件开发的发展历史 人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...
随机推荐
- bzoj4476 [Jsoi2015]送礼物
化简式子 $M>=m+ans*(r-l+k)$ 发现$M,m$确定时,总区间长度越小越好,于是假定右端点为最小值$M+ans*l>=m+ans*r+ans*k$, 右面都确定了,但最大值仍 ...
- 虚拟机console基础环境部署——系统基础环境
1. 概述2. 工具类安装2.1 安装vim2.2 安装tree2.3 安装expect2.4 安装lsof3. 编译环境类安装 1. 概述 本系列博客是在最小化安装CentOS6.5的基础上,通过配 ...
- 发送email
package com.rjj.d; import java.security.GeneralSecurityException; import java.util.Date; import java ...
- Asp.Net Core 轻松学-正确使用分布式缓存
前言 本来昨天应该更新的,但是由于各种原因,抱歉,让追这个系列的朋友久等了.上一篇文章 在.Net Core 使用缓存和配置依赖策略 讲的是如何使用本地缓存,那么本篇文章就来了解一下如何使用分 ...
- 通过XDocument方式把List写入Xml文件
List<Person> list=new List<Person>{ new Person(){Name="张三",Age=50,Address=&quo ...
- Java集合 - List介绍及源码解析
(源码版本为 JDK 8) 集合类在java.util包中,类型大体可以分为3种:Set.List.Map. JAVA 集合关系(简图) (图片来源网络) List集合和Set集合都是继承Collec ...
- Chrome内核浏览器打开网页报 错误代码: ERR_TIMED_OUT
升级win10之后如果出现chrome内核的浏览器网页总是打不开 打开很慢 而ie和edge是可以正常访问的 用这个方法可以 我弄了几天终于 搞好了我直接转载过来了近期,工程师收到大量反馈360浏 ...
- ASP.NET Core 身份验证(一)
前言 这篇文章我想带领大家了解一下 ASP.NET Core 中如何进行的身份验证,在开始之前强烈建议还没看过我写的 Identity 系列文章的同学先看一下. Identity 入门系列文章: Id ...
- 利用requirejs实现vue的模块化开发
通常vue都是搭配webpack+vue-cli使用的 如果不在nodejs环境下开发web应用呢? 这里提出一个解决方案: 1.加载requirejs,并且指定main函数 <script d ...
- javascript 字符串转换数字的方法大总结
方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...