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

    the-webdriver-wire-protocol协议

    所以: 当我们用代码

    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区别

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

    个人号

  • 相关阅读:
    lambda表达式
    You can't specify target table 't_mail_marketing' for update in FROM clause
    从对象list中获取对象属性list
    枚举缓存
    Solr语法
    通过Telnet查询注册服务
    日志查询
    Maven 屏蔽静态文件
    抽奖
    随机码生成方法
  • 原文地址:https://www.cnblogs.com/hchengmx/p/10745116.html
Copyright © 2011-2022 走看看