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大体上类 ...
- 软件项目发展历史<人月神话>这本书好
几乎是计算机软件开发的发展历史 人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...
随机推荐
- 【刷水】之USACO2008资格赛(Bzoj1599-1603)
做之前真是没想到有这么水>.< 但做了还是发上来吧>.< 就当是刷一刷AC量&1A率什么的>.< Bzoj1599: [Usaco2008 Oct]笨重的石 ...
- BZOJ_3210_花神的浇花集会_切比雪夫距离
BZOJ_3210_花神的浇花集会_切比雪夫距离 Description 在花老师的指导下,每周4都有一个集会活动,俗称“浇水”活动. 具体浇水活动详情请见BZOJ3153 但这不是重点 花神出了好多 ...
- BZOJ_3262_陌上花开_CDQ分治+树状数组
BZOJ_3262_陌上花开_CDQ分治+树状数组 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的 ...
- iOS 远程推送通知 详解
1: ios本地通知和远程通知 http://wangjun.easymorse.com/?p=1482 2: 苹果远程通知服务申请激活例图 (外国佬写的.) http://mobiforge.com ...
- 【爆料】-《昆士兰大学毕业证书》Queensland一模一样原件
☞昆士兰大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...
- Docker系列之swarm集群搭建
学习Docker很久了,今天分享一下Docker的swarm集群的搭建过程很简单 首先第一步是 每台机器上面都要安装docker 本人使用的是centos7操作系统,使用3太虚拟机,3太虚拟机必须网络 ...
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之 ...
- Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
http://blog.csdn.net/gyming/article/details/8168166/ 最近接受的这个项目需要Android SDK Tools revision 22.6.2 or ...
- 笔记:Java虚拟机运行时数据区
Java虚拟机在执行Java程序的过程中会把它管的内存划分为以下若干个不同的区域: 1.程序计数器 程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器:由于Java虚拟机的 ...
- 常见文本类css属性
学习web的第六天 p{ font-size:18px; /*文本尺寸*/ font-family:"隶书"; /*文本字体*/ font-weight:bold; /* ...