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

就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在ThoughtWorks公司的酝酿之中。WebDriver项目的初衷是把端对端测试与底层测试工具隔离开。通常情况下,这种隔离手段通过适配器(Adapter)模式完成。WebDriver正是来源于该方法在许多项目上的不断实践应用,最初是HtmlUnit的封装,工具发布后很快开始支持Internet Explorer和Firefox。WebDriver的最初代码在2007年初发布。
  在WebDriver最初发布时,与Selenium RC存在显著差异,尽管它们都属于浏览器自动化的API工具。对于用户来说,最明显的区别在于Selenium RC提供基于字典的API,所有方法都在一个类中开放,而WebDriver的API更面向对象。此外,WebDriver仅支持Java,而Selenium RC提供广泛的语言支持。技术差异也很明显:Selenium Core(RC的基础)基本上是JavaScript应用,运行在浏览器的安全沙箱之内。WebDriver则尝试原生绑定到浏览器中,绕开了浏览器的安全模型,代价就是框架自身的开发投入显著增加。
  在2009年8月,两个项目宣布合并,Selenium WebDriver就是合并的成果。
  WebDriver的创建者Simon Stewart早在2009年8月的一份邮件中解释了项目合并的原因:
  为何把两个项目合并?部分原因是WebDriver解决了Selenium存在的缺点(比如,能够绕过JS沙箱。我们有出色的API),部分原因是Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器),部分原因是因为Selenium的主要贡献者和我都觉得合并项目是为用户提供最优秀框架的最佳途径。
  目前,WebDriver支持的语言绑定包括Java、C#、Python和Ruby。它支持Chrome、Firefox、Opera和移动端Android、iPhone浏览器。此外,还有其他关联项目,不在同一源代码库中维护,但是和主项目(Selenium WebDriver)紧密合作,例如提供Perl绑定支持、BlackBerry浏览器支持,以及“无头”WebKit——用于持续集成的测试其无法正常显示的情况。最初的Selenium RC机制仍然维持,帮助WebDriver在浏览器不受支持的情况下提供支持。
  在两个项目合并中出现了哪些架构方面的问题?学到了哪些经验和教训?Simon Stewart在《The Architecture of Open Source Applications》一文中做了详细的描述,本文参考了以下内容:
  http://www.aosabook.org/en/selenium.html
  http://www.infoq.com/cn/news/2011/07/selenium-arch-2
  处理复杂性
  软件是模块构造起来的。这些模块很复杂,作为API的设计人员们,可以选择如何处理这种复杂性。极端情况下,可能会传播这种复杂性,这意味着API的每一位用户都需要牵涉其中。另一个极端情况是承担尽可能多的复杂性并将其隔离在某个地方。这个地方对于许多想一探究竟的API用户来说黑暗而恐怖。折中方案则是API的用户,如果无须深入了解实现细节,那么只需面对当前所遇到的复杂性即可。

就在Selenium1.0处于开发阶段的同时,另一款浏览器自动化框架WebDriver也正在ThoughtWorks公司的酝酿之中。WebDriver项目的初衷是把端对端测试与底层测试工具隔离开。通常情况下,这种隔离手段通过适配器(Adapter)模式完成。WebDriver正是来源于该方法在许多项目上的不断实践应用,最初是HtmlUnit的封装,工具发布后很快开始支持Internet Explorer和Firefox。WebDriver的最初代码在2007年初发布。
  在WebDriver最初发布时,与Selenium RC存在显著差异,尽管它们都属于浏览器自动化的API工具。对于用户来说,最明显的区别在于Selenium RC提供基于字典的API,所有方法都在一个类中开放,而WebDriver的API更面向对象。此外,WebDriver仅支持Java,而Selenium RC提供广泛的语言支持。技术差异也很明显:Selenium Core(RC的基础)基本上是JavaScript应用,运行在浏览器的安全沙箱之内。WebDriver则尝试原生绑定到浏览器中,绕开了浏览器的安全模型,代价就是框架自身的开发投入显著增加。
  在2009年8月,两个项目宣布合并,Selenium WebDriver就是合并的成果。
  WebDriver的创建者Simon Stewart早在2009年8月的一份邮件中解释了项目合并的原因:
  为何把两个项目合并?部分原因是WebDriver解决了Selenium存在的缺点(比如,能够绕过JS沙箱。我们有出色的API),部分原因是Selenium解决了WebDriver存在的问题(例如支持广泛的浏览器),部分原因是因为Selenium的主要贡献者和我都觉得合并项目是为用户提供最优秀框架的最佳途径。
  目前,WebDriver支持的语言绑定包括Java、C#、Python和Ruby。它支持Chrome、Firefox、Opera和移动端Android、iPhone浏览器。此外,还有其他关联项目,不在同一源代码库中维护,但是和主项目(Selenium WebDriver)紧密合作,例如提供Perl绑定支持、BlackBerry浏览器支持,以及“无头”WebKit——用于持续集成的测试其无法正常显示的情况。最初的Selenium RC机制仍然维持,帮助WebDriver在浏览器不受支持的情况下提供支持。
  在两个项目合并中出现了哪些架构方面的问题?学到了哪些经验和教训?Simon Stewart在《The Architecture of Open Source Applications》一文中做了详细的描述,本文参考了以下内容:
  http://www.aosabook.org/en/selenium.html
  http://www.infoq.com/cn/news/2011/07/selenium-arch-2
  处理复杂性
  软件是模块构造起来的。这些模块很复杂,作为API的设计人员们,可以选择如何处理这种复杂性。极端情况下,可能会传播这种复杂性,这意味着API的每一位用户都需要牵涉其中。另一个极端情况是承担尽可能多的复杂性并将其隔离在某个地方。这个地方对于许多想一探究竟的API用户来说黑暗而恐怖。折中方案则是API的用户,如果无须深入了解实现细节,那么只需面对当前所遇到的复杂性即可。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-22 14:17:58

Selenium 2.0的由来及设计架构(一)的相关文章

自动化测试学习(八) 基于maven的selenium 2.0环境搭建

之前我就讲过一种方试来搭建selenium rc 的环境搭建,那个文章是基于selenium RC 1.0的的方式,目前官网已经不提供1.0的下载了,我所提供的下载链接是CSDN上的. 其实,如果大家熟悉maven的话,selenium RC将变成易常简单,当然,我的操作还是基于java语言阵营的. 前提:你要有maven环境.关于maven环境的搭建,请参考本博客的关于maven的文章.左侧导航栏有maven环境搭建的相关文章. 第一步: Cmd打开命令提示符号,创建一个maven项目,命令如

用户名 密码-VC++ 6.0 登录界面的设计,求救!!

问题描述 VC++ 6.0 登录界面的设计,求救!! VC++ 6.0 中用对话框来设计用户登录界面,怎么来完成用户名.密码的设计??并且用户名.密码都有默认值??? 解决方案 新建一个对话框,在上面画上两个static两个文本框,两个按钮默认值可以从文件中读取.要完整代码请采纳. 解决方案二: void CMyApp1Dlg::OnOK() { // TODO: Add extra validation here this->UpdateData(); if (m_eu == "&quo

求大神UDP服务端高并发设计架构,在线等

问题描述 求大神UDP服务端高并发设计架构,在线等 服务端只开了一个固定端口(业务规定),网上查了下,说可以保存客户端IP跟端口,服务端建新的SOCKET,跟新端口跟客户端处理后续数据,写了个简单程序,但是当同时刻连上来的客户端超过200个,就出现丢包情况: 1. 一个线程接收固定端口的数据,把数据分组 2. 把分组数据分配的SOCKET,端口,通知客户端 3. 多线程跟客户端处理数据 解决方案 可以使用计算机群集,很多计算机冗余,负载均衡

菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)

之前我就讲过一种方试来搭建selenium rc 的环境搭建,那个文章是基于selenium RC 1.0的的方式,目前官网已经不提供1.0的下载了,我所提供的下载链接是CSDN上的. 其实,如果大家熟悉maven的话,selenium RC将变成易常简单,当然,我的操作还是基于java语言阵营的. 前提:你要有maven环境.关于maven环境的搭建,请参考本博客的关于maven的文章.左侧导航栏有maven环境搭建的相关文章.   第一步: Cmd打开命令提示符号,创建一个maven项目,命

如何做好大数据产品设计架构和技术策略?

作者经过研发多个大数据产品,将自己形成关于大数据知识体系的干货分享出来,希望给大家能够快速建立起大数据产品的体系思路,让大家系统性学习和了解有关大数据的设计架构. 很多人都看过不同类型的书,也接触过很多有关大数据方面的文章,但都是很零散不成系统,对自己也没有起到多大的作用,所以作者第一时间,带大家从整体体系思路上,了解大数据产品设计架构和技术策略. 大数据产品,从系统性和体系思路上来做,主要分为五步: 针对前端不同渠道进行数据埋点,然后根据不同渠道的采集多维数据,也就是做大数据的第一步,没有全量

《逻辑与计算机设计基础(原书第5版)》——第3章 3.0组合逻辑电路的设计

第3章 3.0组合逻辑电路的设计 本章我们学习组合逻辑电路的设计.本章以描述一个分层设计方法开始,其中,目标功能被分解为复杂性更低的更小块.这些小块可以被单独设计,然后连接在一起,形成最终的电路.我们将学习一些功能函数和对应的基本电路,它们在大型数字电路设计中很有用.这些基本.可重复使用的电路,我们称之为功能模块(functional block),分别能实现单变量函数.译码器.编码器.代码转换器和多路复用器.然后本章介绍一种特殊的执行算术运算的功能块,同时还将介绍由一系列组合单元组成的迭代电路

AMD下一代GPU设计架构“Southern Island”

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   正在进行的Computex2010电脑展在今天开幕后几乎达到巅峰,各家作为亚洲最大.世界第二大的电脑展会,Computex一直引领着行业的潮流发展.在今天的展会上,中关村在线核心硬件事业部搜集各方面信息,终于汇总了AMD下一代GPU设计架构"Southern Island",中文名为南岛的GPU架构产品相关信息.现在就让我们一起去关注这款GP

IBM展示全新服务器设计架构EX5的新款服务器产品

IBM于本周二在德国汉诺威举行的http://www.aliyun.com/zixun/aggregation/14435.html">CeBIT trade show上展示了采用了全新服务器设计架构EX5的新款System x和BladeCenter服务器产品,新产品在削减数据中心能耗成本的同时极大提升应用的性能表现. EX5服务器的架构和传统x86服务器架构有所区别.传统的x86架构将处理器和内存是绑在一起的,而采用了IBM第五代X架构的EX5服务器将内存从处理器中分离出来,自成一体.

PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc

Q:越来越多Web 2.0网站走向应用平台,你认为打造这类平台的关键为何? A:简单来看,应用平台就是API,任何Ajax或 Web 2.0类型的网站,都是在应用平台上运用了API来创造出视觉介面的互动效果.例如Yahoo Mail,透过简单的Request呼叫,来读取後续的信件.打造这类网站,如何规画解决问题的方式,会决定了网站未来的扩充性(Scalability),而非效能决定网站的发展. Q:如何规画网站架构,才会具有扩充性? A:将一个网站应用,分成几十个独立小程式,前端透过 API提供