当你看到这篇文章时一定会诧异,2.0都广泛使用了,为何还要了解1.0的内容呢?1.0的确已经慢慢的成为历史,那我们就先通过历史来认识一下selenium的发展吧。

Jason Huggins在2004年发起了Selenium项目,当时他在ThoughtWorks公司开发内部的时间和费用(Time and Expenses)系统,该应用使用了大量的JavaScript。虽然IE在当时是主流浏览器,但是ThoughtWorks还使用一些其他浏览器(特别是Mozilla系列),当员工在自己的浏览器中无法正常运行T&E系统时就会提交bug。当时的开源测试工具要么关注单一浏览器(通常是IE),要么是模拟浏览器(如HttpUnit),而购买商业工具授权的成本会耗尽这个小型内部项目的有限预算,所以它们都不太可行。

幸运的是,所有被测试的浏览器都支持Javascript。Jason和他所在的团队有理由采用Javascript编写一种测试工具来验证应用的行为。他们受到FIT(Framework for Integrated Test)的启发,使用基于表格的语法替代了原始的Javascript,这种做法支持那些编程经验有限的人在HTML文件中使用关键字驱动的方式来编写测试。该工具,最初称为“Selenium”,后来称为“Selenium Core”,在2004年基于Apache 2授权发布。

Selenium的表格格式类似于FIT的ActionFixture。表格的每一行分为三列。第一列给出了要执行的命令名称,第二列通常包含元素标记符,第三列包含一个可选值。例如,如下格式表示了如何在名称为“q”的元素中输入字符串“Selenium”:

type name=q Selenium

因为Selenium过去使用纯JavaScript编写,它的最初设计要求开发人员把准备测试的应用和Selenium Core、测试脚本部署到同一台服务器上以避免触犯浏览器的安全规则和JavaScript沙箱策略。在实际开发中,这种要求并不总是可行。更糟的是,虽然开发人员的IDE能够帮助他们快速处理代码和浏览庞大的代码库,但是没有针对HTML的相关工具。人们很快意识到维护一个中等规模的测试集是笨拙而痛苦的过程。

为了解决这个问题和其他问题,他们编写了HTTP代理,这样所有的HTTP请求都会被Selenium截获。使用代理可以绕过“同源”规则(浏览器不支持Javascript调用任何当前页面所在服务器以外的其他任何东西)的许多限制,从而缓解了首要弱点。这种设计使得采用多种语言编写Selenium成为可能:它们只需把HTTP请求发送到特定URL。连接方法基于Selenium Core的表格语法严格建模,称之为“Selenese”。因为语言绑定在远程控制浏览器,所以该工具称为“Selenium Remote Control”或者“Selenium RC”。

就在Selenium处于开发阶段的同时,另一款浏览

器自动化框架WebDriver也正在ThoughtWorks公司的酝酿之中。Selenium2.0之webdriver的介绍请期待下一篇文章。

上面介绍中其实也提到了1.0的概况,下图就是它的工作流程。

1. 测试用例通过Http请求建立与 selenium-RC server 的连接

2. Selenium RC Server 驱动一个浏览器,把Selenium Core加载入浏览器页面当中,并把浏览器的代理设置为Selenium Server的Http Proxy

3. 执行用例向Selenium Server发送Http请求,Selenium Server对请求进行解析,然后通过Http Proxy发送JS命令通知Selenium Core执行操作浏览器的动作并注入 JS 代码

4.Selenium Core执行接受到的指令并操作

5. 当浏览器收到新的请求时,发送http请求

6. Selenium Server接收到浏览器发送的Http请求后,自己重组Http请求,获取对应的Web页面

7. Selenium Server中的Http Proxy把接受到的页面返回给浏览器。

同源策略,它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。所谓同源,就是指域名、协议、端口相同。所以,打开一个baidu的网页只能执行baidu下的JavaScript脚本,而另外一个tab是google,baidu下的JavaScript则不能执行,从而防止对本网页的非法篡改。

那么Selenium RC通过http代理的方式很好的解决了同源策略并欺骗了浏览器。

下一篇文章介绍2.0即selenium webdriver的发展,敬请期待。

Selenium 1.0的历史及工作原理相关推荐

  1. android AVB2.0(一)工作原理及编译配置

    android AVB2.0介绍,本篇主要介绍AVB2.0的概述和工作原理.配置和编译. 有关AVB2.0的其他子系统的介绍,请查看android AVB2.0学习总结 一.AVB2.0概述 什么是A ...

  2. grant 1.0 mysql 权限系统工作原理

    文章目录 一.权限系统作用 二.工作原理 授权表 刷新和查看权限表 一.权限系统作用 MySQL 权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的 SELECT.INSER ...

  3. CPU的发展历史和工作原理

    发展历史∶ CPU出现于大规模集成电路时代,处理器架构设计的迭代更新以及集成电路工艺的不断提升促使其不断发展完善.从最初专用于数学计算到广泛应用于通用计算,从4位到8位.16位.32位处理器,最后到6 ...

  4. 深入CORS:历史,工作原理和最好的例子

    学习同源策略和CORS(Cross-Origin-Resource-Sharing)(跨域资源共享)的历史的演变,深入理解CORS和不同类型的跨域访问策略以及一些最好的例子. 文章目录 你的浏览器控制 ...

  5. CSS的历史与工作原理

    1. 浏览器的发展与CSS 网页浏览器主要通过HTTP协议连接网页服务器而取得网页,HTTP容许网页浏览器送交资料到网页服务器并且获取网页.目前最常用的 HTTP 是 HTTP/1.1,这个协议在RF ...

  6. Selenium 2.0的由来及设计架构(一)

    上一篇文章介绍了Selenium1.0的历史及工作原理, 现在,接着上一次的内容说2.0的由来及设计架构. 就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在 ...

  7. selenium工作原理详解

    selenium简介 Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11), ...

  8. AVB源码学习(一):AVB2.0工作原理及编译配置

    参考资料 感谢前辈的blog,安全相关的资料可太少了,很详细很卓越 https://blog.csdn.net/jackone12347/article/details/116241676 前言 在这 ...

  9. 真空三极管:发明历史和物理工作原理

    真空三极管是:发明历史与工作原理 Triode Vacuum Tube: History & Physics Kathy老师讲述的有趣科学历史 01 Triode Valve   Before ...

最新文章

  1. thinkphp-条件判断-范围判断-range标签
  2. aforge videoresolution获取的相机像素不全_新手做视觉系统,如何选择合适的相机?...
  3. 商品的包装(外贸知识二)
  4. 优秀设计师必备:视觉传达设计与视觉思维
  5. 我的爱好html子页模板,我的爱好
  6. 自定义控件——轮播广告条
  7. [Head First Java] - 线程共享数据问题
  8. LeetCode 945. 使数组唯一的最小增量(贪心)
  9. php文件下载不完整,求帮看下这段PHP下载MP4文件的有关问题,文件下载不完整
  10. 好好学习 天天编程—C语言之环境搭建(一)
  11. 查找业务对应的IDOC类型(HELP)
  12. 【Java与智能设备】Ch0402 Activity的生命周期
  13. imdisk虚拟光驱安装linux,ImDisk Virtual Disk Driver
  14. MAXIMO工作流待办邮件提醒配置
  15. springboot找不到对象(自动注入失败)
  16. SSM+人才交流平台 毕业设计-附源码221022
  17. 为什么需要虚继承,虚继承的实现原理
  18. x86、i386、IA-32、amd64、x64、x86-64、IA-64的区别
  19. 6.获取环球时报关键词新闻--动态网页Ajax
  20. .php可以转换为.jpg么,php pdf转换为jpg的方法

热门文章

  1. 编写你人生中第一个机器学习代码吧!
  2. Ubuntu 64bit 安装 ulipad4.1
  3. 1675: [Usaco2005 Feb]Rigging the Bovine Election 竞选划区(题解第二弹)
  4. myeclipse下拷贝的项目,tomcat下部署名称和导出为war包的名称默认值修改
  5. Apache Spark源码走读之8 -- Spark on Yarn
  6. mysql 客户端提示“Cannot proceed because system tabl...
  7. 允许用户在web Interface上修改密码
  8. .Net并行库介绍——Task(1)
  9. “元宇宙”数字化理解
  10. 一道Python面试题,据说大部分人都中招了,纷纷开始怀疑自己