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为例):

  1. 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')] " );
  1. Selenium Server将编写的Java代码转换成一段浏览器能看懂的JS代码
  2. 浏览器根据JS实现相关操作

这样做有两个好处:

  1. 可以用一套代码来驱动所有的浏览器;
  2. 通过设置代理的方式突破了JS的安全机制(不允许访问跨域请求),

这样做的不好的点:

  1. 代码执行的效率很大程度上决定于Selenium Server转换的JS的代码的质量;
  2. 浏览器也对JS有很多的限制;

2. webdriver的产生

  1. 2006年, Webdriver是由Google工程师开发的,WebDriver是通过原生浏览器支持或者浏览器拓展来控制浏览器, 取代了嵌入web的JavaScript(此处提到了JavaScript的沙箱机制,突破JavaScript的安全模型),除了来自浏览器厂商的支持外(也就是直接控制浏览器进行直接沟通), WebDriver还利用操作系统级别的调用, (什么操作系统级别的调用?) , 模拟用户输入。

3. selenium和webdriver的合并

  1. 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这套协议非常之强大,几乎可以操作浏览器做任何事情,包括打开、关闭、最大化、最小化、元素定位、元素点击、上传文件等等等等。

Selenium的发展历史及原理

所以: 当我们用代码

Chromedriver driver= new Chromedriver();
driver.get("http://www.google.com");

时,系统完成了以下的操作:

  1. 确定请求的浏览器是否存在?还有版本是否匹配。
  2. 启动一个Web Service,这个Service使用了Selenium定义的The WebDriver Wire Protocol协议,这个协议对于不同浏览器是通用的,所以这也就是同一套代码可以在不同浏览器中运用的运行。
  3. 向浏览器发送一个get请求,请求完成浏览器的跳转;

参考引用:

  1. Selenium体系结构的疑惑及解答

  2. Selenium1.0的介绍

  3. selenium3.0的一些重要变化

  4. Selenium 1.0入门手册

  5. 不要再问我跨域的问题了

  6. webdriver官方协议文档

  7. selenium和webdriver区别

本文希望对您有所帮助,如何问题可联系我的个人微信

Selenium的发展历史及原理

上一篇:Ubuntu15.10下如何使用EasyGui模块开发Python GUI


下一篇:构造函数,C++内存管理,内存泄漏定位