Watir 历史

Watir 诞生于 2001 年由 Chris Morris 编写的一段 Ruby 代码,通过 COM 接口 来控制 Internet Explorer。(1)该库称为 cliec。2003 年,Bret Pettichord 和 Brian Marick 开始使用此代码作为他们教授的测试自动化课程的基础。受此课程的启发,但需要能够处理更高级网站的内容,Paul Rogers 创建了自己的库,并将其称为 WTR(Ruby 中的 Web 测试)。(2)该库具有更多功能,但 API 较差。2004 年 8 月,Bret 和 Paul 在 Agile XP 会议 上聚在一起,取 cliec 和 WTR 中最好的部分,并使用 TDD 原则 创建了一个更简洁的 API。(3)新名称的首次提交来自 2004 年 9 月 30 日。(4

从该项目的最早阶段开始,Watir 就有人致力于围绕它建立一个社区。这项工作主要独立于编写代码。早期,由 Jonathan Kohl 负责,他担任编写初始文档、创建代码示例和指南以及进行一般推广的角色。多年来,其他担任此角色的人员包括 Chris McMahon、Zeljko Filipin、Alister Scott 和 David McNulla。

Bret 于 2004 年加入 ThoughtWorks,并了解到 Jason Huggins 在使用一个最初称为 JavaScriptTestRunner 的程序在浏览器中利用 JavaScript 进行测试方面所做的工作,该程序最终将被称为 Selenium。(5)有趣的事实:Jason 为他的项目列出了潜在名称,但当 ThoughtWorks 需要在澳大利亚的一次会议上提交一份议程,其中包括讨论这项技术时,Jason 无法提供正式名称。Paul Hammant 和 Bret 查看了该列表,Bret 在 QA 社区的背景使他认识到将该项目称为 Selenium 的幽默之处。当时主要的昂贵商业 UI 测试解决方案归 Mercury Interactive 所有,而 Selenium 已被证明是 水银中毒的解药。Jason 回来后发现他的项目以他的名字命名,但这肯定被证明是一个极好的品牌名称。

Selenium 的原始版本专注于成为一个基于 HTML 表格的领域特定语言 (DSL) 的测试框架。它有一些技术限制和灵活性问题,并且提供了多种执行类似操作的方法。它的最大优势是对所有开始从 Microsoft 窃取市场份额的各种浏览器的支持。为了跟上 Selenium 的步伐,各个小组为 Watir 创建了特定于浏览器的项目,包括 FireWatirOperaWatirSafariWatirChromeWatir)。

Selenium 还具有轻松支持多种编程语言开发的优势。因此,Watir 也通过 Watij 移植到 Java,通过 Watin 移植到 .NET。

WebDriver 是由 Simon Stewart 于 2007 年创建的(当时也在 ThoughtWorks),它为 Selenium 面临的一些主要问题提供了解决方案。它不是为所有浏览器应用单一的 JavaScript 实现,而是要求为每个浏览器创建一个具有更多功能和灵活性的独特驱动程序。代码库拥有更简洁的 API,并且更像是一个直接浏览器自动化命令的工具包,而不是一个测试框架。(6

随着 WebDriver 驱动程序的成熟,Selenium 发现 WebDriver 解决方案足够有吸引力,同意合并这些项目。虽然 Selenium 2.0 为了向后兼容有效地模拟了 Selenium 1.0 (RC),但采用 WebDriver 的面向对象驱动程序方法需要进行大量的代码更新。由于 Watir 一直使用“驱动程序”方法,具有讽刺意味的是,与 Selenium 用户相比,Watir 用户在代码中需要进行的调整要少得多,以便能够充分利用 WebDriver 的功能。

2009 年,Watir 开发人员 Jari Bakken 接触到 WebDriver 后,他开始为 Selenium 和 Watir 开发它的 Ruby 实现。Jari 已经编写了 Celerity,这是一个 JRuby 项目,用于实现 HtmlUnit 的包装器,以便使用与 Watir 相同的 API 提供无界面测试选项。在对 watir-webdriver 进行开发时,他决定采用 Celerity 规范,并使它们可用于这两个项目。(7)。在这样做时,他创建了 WatirSpec 存储库,该存储库可用于实现 Watir API 的任何基于 Ruby 的项目。

WebDriver 提供的功能促使 Watir 团队在有意义时添加功能并更改其约定。Watir 2.0(于 2011 年 8 月发布)中一个向后不兼容的重大更改是从一维索引变为零维索引。以“像人一样”进行索引是有意义的,直到你必须不断弄清楚你是在使用 Watir 集合还是 Ruby 数组(或 WebDriver)。Jarmo Pertman 接受了使 Watir 完全符合 WatirSpec 的挑战,并最终在 2012 年 4 月发布了 Watir 3.0

为了鼓励使用 watir-webdriver,Hugh McGowan 将 Watir 代码库重命名为“watir-classic”,并创建了一个“元”存储库,该存储库默认使用 watir-classic 实现来处理 Internet Explorer,并使用 watir-webdriver 实现来处理所有其他浏览器。该代码由 Jarmo 实现,并于 2012 年 9 月作为 Watir 4.0 发布。

2015 年 1 月,Jari 决定辞去 selenium-webdriver 和 watir-webdriver gem 的维护者职务。(8)。Alex Rodionov 在过去三年中一直是活跃的贡献者,在 Titus Fortner 的协助下接管了该项目的首要所有权。Titus 当时在 Blackbaud 与 Bret 共事,刚刚被正式添加到开发团队中。

随着 Microsoft 发布 Edge 浏览器并宣布不再向 Internet Explorer 添加新功能,对 watir-classic 代码进行积极维护的需求大大减少。同时,对于 Watir 是什么以及应该使用哪些 gem 也存在着很大的困惑;Watir 用户经常说他们使用的是“Watir WebDriver,而不是 Watir”,这并不少见。由于面向测试人员的 API 一直是 Watir 的主要区别特征,而不是实现,因此该项目需要重新关注并消除歧义。2016 年,Titus 带头进行了这项工作,弃用了 watir-classic 和 watir-webdriver gem,并发布了 Watir 6.0,其中包含一个新徽标、一个新网站以及一个更新版本的 Selenium 支持代码。基于与 Bret 关于 Watir 背后原始理念的多次对话,Titus 更新了 Watir,使其不再像 Selenium 的替代实现,而是更充分地利用 Watir API 来移除额外的配置并添加更符合 Watir 原始精神的默认等待行为。

Watir 6 并没有成为 Selenium 的竞争对手,而是依赖 Selenium 代码来实现 WebDriver 的浏览器自动化功能。可以将 Selenium 视为浏览器自动化库,将 Watir 视为测试自动化库。Selenium 为用户提供了一种通过“照我说的做”方法与浏览器进行交互的手段,而 Watir 则利用 Selenium 允许用户通过“按我说的做”方法来测试 UI。

在 Watir 6 发布后不久,一位 Sauce Labs 用户抱怨 Watir 在该平台上的运行速度有多慢。Titus 最近开始在 Sauce 工作,发现确实有很多可以进行的性能改进。各种 6.x 版本主要包括尽可能地进行性能优化,同时仍然提供相同的可靠性。随着时间的推移,添加了各种新颖有趣的功能。在 Selenium 3 的最终版本发布后,直到 Selenium 4 在 2021 年初作为测试版发布之前,Watir 并没有进行太多开发。Watir 7.0 于 2021 年 10 月在 Selenium 4.0 发布后的一周内发布。