什么是 Selenium?入门教程

什么是 Selenium?

Selenium 是一个免费(开源)的自动化测试框架,用于验证不同浏览器和平台上的 Web 应用程序。您可以使用多种编程语言,如 Java、C#、Python 等来创建 Selenium 测试脚本。使用 Selenium 测试工具进行的测试通常被称为 Selenium 测试

what is selenium

专家见解

“避免在测试中使用固定的休眠延迟。相反,使用显式等待(如 WebDriverWait)等待元素加载。这使得您的脚本更可靠、更快,因为它们会动态响应实际页面条件——这是所有学生,从 Selenium 开始,都应该遵循的关键最佳实践。”

—— Himanshu Sheth,Selenium 专家

Selenium 工具套件

Selenium 软件不仅仅是一个单一的工具,而是一个软件套件,每个部分都满足组织对 Selenium QA 测试的不同需求。以下是工具列表:

  • Selenium 集成开发环境 (IDE)
  • Selenium 远程控制 (RC)
  • WebDriver
  • Selenium Grid

Selenium Tool Suite

目前,Selenium RC 和 WebDriver 合并成一个框架,形成 Selenium 2。顺便说一下,Selenium 1 指的是 Selenium RC。

Selenium 视频教程

如果视频无法访问,请点击此处

Selenium 是谁开发的?

由于 Selenium 是不同工具的集合,它也有不同的开发者。以下是对 Selenium 项目做出杰出贡献的关键人物:

Developed Selenium

最初,Selenium 是由 Jason Huggins 于 2004 年创建的。作为 ThoughtWorks 的一名工程师,他正在开发一个需要频繁测试的 Web 应用程序。他意识到他们的应用程序重复性手动测试变得越来越低效,于是创建了一个可以自动控制浏览器操作的 JavaScript 程序。他将这个程序命名为“JavaScriptTestRunner”。

看到这个想法在帮助自动化其他 Web 应用程序方面的潜力,他将 JavaScriptRunner 开源,后来更名为 Selenium Core。对于那些有兴趣探索 Web 应用程序测试其他选项的人,可以看看这些 Selenium 替代品

同源策略问题

同源策略禁止 JavaScript 代码访问与启动它的域不同的域中的元素。例如,www.google.com 中的 HTML 代码使用 JavaScript 程序“randomScript.js”。同源策略只允许 randomScript.js 访问 google.com 内部的页面,例如 google.com/mail、google.com/login 或 google.com/signup。但是,它无法访问来自不同站点(如 yahoo.com/search 或 guru99.com)的页面,因为它们属于不同的域。

The Same Origin Policy Issue

这就是为什么在 Selenium RC 之前,测试人员需要安装 Selenium Core(一个 JavaScript 程序)和包含待测试 Web 应用程序的 Web 服务器的本地副本,以便它们属于同一个域。

Selenium 远程控制 (Selenium RC) 的诞生

Paul Hammant

不幸的是,由于同源策略施加的限制,使用 Selenium Core 的测试人员必须在自己的本地计算机上安装整个待测应用程序和 Web 服务器。因此,另一位 ThoughtWork 的工程师 Paul Hammant 决定创建一个服务器,作为 HTTP 代理来“欺骗”浏览器,使其相信 Selenium Core 和待测 Web 应用程序来自同一个域。这个系统被称为 Selenium 远程控制Selenium 1

Selenium Grid 的诞生

Patrick Lightbody

Selenium Grid 由 Patrick Lightbody 开发,旨在尽可能缩短测试执行时间。他最初将该系统命名为“Hosted QA”。它能够捕捉重要阶段的浏览器截图,并能同时向不同的机器发送 Selenium 命令。

Selenium IDE 的诞生

Shinya Kasatani

日本的 Shinya Kasatani 创建了 Selenium IDE,这是一个 Firefox 和 Chrome 扩展,可以通过录制和回放功能实现浏览器自动化。他提出这个想法是为了进一步提高创建测试用例的速度。他于 2006 年将 Selenium IDE 捐赠给 Selenium 项目。

WebDriver 的诞生

Simon Stewart

Simon Stewart2006 年左右创建了 WebDriver,当时浏览器和 Web 应用程序变得更加强大,并且对像 Selenium Core 这样的 JavaScript 程序限制更多。它是第一个可以从操作系统级别控制浏览器的跨平台测试框架。

Selenium 2 的诞生

2008 年,整个 Selenium 团队决定将 WebDriver 和 Selenium RC 合并,形成一个更强大的工具,名为 Selenium 2,其中 WebDriver 为核心。目前,Selenium RC 仍在开发中,但仅限于维护模式。Selenium 项目的大部分精力现在都集中在 Selenium 2 上。

那么,为什么叫 Selenium?

Selenium 这个名字源于杰森曾经对他的团队开的一个玩笑。在 Selenium 开发期间,另一个流行的 自动化测试 框架是由名为 Mercury Interactive 的公司(是的,就是惠普收购 QTP 之前的原始制造商)开发的。由于 Selenium 是汞中毒的著名解药,杰森建议了这个名字,他的队友们也采纳了。这就是我们至今仍称这个框架为 Selenium 的原因。

Why the Name Selenium

什么是 Selenium IDE?

Selenium 集成开发环境 (IDE) 是 Selenium 套件中最简单的框架,也是最容易学习的。它是一个 Chrome 和 Firefox 插件,您可以像安装其他插件一样轻松安装。然而,由于其简单性,Selenium IDE 只能用作原型工具。如果您想创建更高级的测试用例,您需要使用 Selenium RC 或 WebDriver。

Selenium IDE

什么是 Selenium 远程控制 (Selenium RC)?

Selenium RC 在很长一段时间内是整个 Selenium 项目的旗舰测试框架。这是第一个自动化 Web 测试 工具,允许用户使用他们喜欢的编程语言。截至 2.25.0 版,RC 可以支持以下编程语言:

Selenium Remote Control (Selenium RC)

什么是 WebDriver?

WebDriver 在许多方面都优于 Selenium IDE 和 Selenium RC。它实现了更现代、更稳定的浏览器自动化方法。WebDriver 与 Selenium RC 不同,不依赖 JavaScript 进行 Selenium 自动化测试。它通过直接与浏览器通信来控制浏览器。

支持的语言与 Selenium RC 相同。

  • Java
  • C#
  • PHP
  • Python
  • Perl
  • Ruby

Webdriver

什么是 Selenium Grid?

Selenium Grid 是一个与 Selenium RC 结合使用的工具,用于同时在不同机器和不同浏览器上运行并行测试。并行执行意味着同时运行多个测试。

功能

  • 实现在多个浏览器和环境同时运行测试
  • 极大地节省时间
  • 利用中心-节点概念。中心充当连接到它的每个节点的 Selenium 命令的中央来源。

Selenium 浏览器和环境支持

由于架构差异,Selenium IDE、Selenium RC 和 WebDriver 支持不同的浏览器和操作环境。

  Selenium IDE WebDriver
浏览器支持 Mozilla Firefox 和 Chrome

Google Chrome 12+

火狐浏览器

Internet Explorer 7+ 和 Edge

Safari,

HtmlUnit 和 PhantomUnit

操作系统 Windows、Mac OS X、Linux 所有可以运行上述浏览器的操作系统。

注意:Opera 驱动已不再工作

如何选择适合您需求的 Selenium 工具

工具 为何选择?
Selenium IDE
  • 了解自动化测试和 Selenium 的概念,包括
  • Selenium 命令,例如 type、open、clickAndWait、assert、verify 等。
  • 定位器,例如 id、name、xpath、css selector 等。
  • 使用 runScript 执行自定义 JavaScript 代码
  • 以各种格式导出测试用例。
  • 在几乎没有编程知识的情况下创建测试。
  • 创建简单的测试用例和测试套件,稍后可以导出到 RC 或 WebDriver。
  • 仅针对 Firefox 和 Chrome 测试 Web 应用程序。
Selenium RC
  • 使用比 Selenese 更具表现力的语言设计测试
  • 在不同的操作系统上针对不同的浏览器(HtmlUnit 除外)运行测试。
  • 使用 Selenium Grid 将您的测试部署到多个环境中。
  • 针对支持 JavaScript 的新浏览器测试您的应用程序。
  • 测试具有复杂 AJAX 场景的 Web 应用程序。
WebDriver
  • 在设计测试用例时使用特定的编程语言。
  • 测试富含 AJAX 功能的应用程序。
  • 在 HtmlUnit 浏览器上执行测试。
  • 创建自定义测试结果。
Selenium Grid
  • 同时在多个浏览器和操作系统上运行您的 Selenium RC 脚本。
  • 运行一个庞大的测试套件,需要尽快完成。

Selenium 与 QTP(现 UFT)的比较

Quick Test Professional (QTP) 是一款专有自动化测试工具,之前由 Mercury Interactive 公司所有,之后于 2006 年被惠普收购。其后来的所有者是 MicroFocus,该工具更名为 UFT one。Selenium 工具套件相对于 QTP 有许多优势,详见下文:

Selenium 相对于 QTP 的优势和好处

Selenium QTP
开源免费使用免费 商业版.
高度可扩展 附加组件有限
可在不同浏览器上运行测试 只能在 FirefoxInternet ExplorerChrome 中运行测试
支持多种操作系统 只能在 Windows 中使用
支持移动设备 QTP 通过 HP 解决方案 HP Mobile Center 支持移动应用测试自动化(iOS 和 Android)
浏览器最小化时仍可执行测试 待测应用程序需要在桌面上可见
可以并行执行测试。 只能并行执行,但需要使用 Quality Center,而 Quality Center 又是一个付费产品。

真实案例研究

🔍 案例研究 1:SaaS 仪表盘的跨浏览器兼容性

场景

一家软件即服务公司正准备发布一款分析仪表盘,该仪表盘需要能够跨现代浏览器(Chrome、Firefox、Edge、Safari)一致运行。

挑战

在每个浏览器上进行手动测试耗时、容易出错,并且无法跟上快速的开发迭代。

使用 Selenium 的解决方案

一位 QA 工程师创建了一个 Selenium Grid 设置,用于在多个浏览器和操作系统组合上同时执行相同的测试套件。测试使用 Python 和 Selenium WebDriver 编写,用于登录、图表过滤和数据导出等操作。

结果

  • 回归测试时间缩短了 80%。
  • 及早发现浏览器特定的渲染错误(例如,IE 中图表错位)。
  • 在不增加额外手动周期的情况下,在整个浏览器矩阵中保持了一致的仪表盘用户体验。

⚙️ 案例研究 2:通过 Selenium + TestNG 实现 Web 应用的 CI/CD 集成

场景

一家中型网络开发公司依赖使用 Jenkins 的 CI/CD 管道。他们需要确保每次代码更改后核心用户旅程都能正常工作。

挑战

新版本部署偶尔会破坏用户流程——登录、表单提交——在日终手动测试之前无法检测到。

使用 Selenium 的解决方案

一位测试人员实现了基于 Java 的 Selenium WebDriver 套件,并与 TestNG 集成。测试涵盖了身份验证、配置文件更新和搜索功能。这些测试在每次 Jenkins 构建时运行,利用并行执行和浏览器参数化。

结果

  • 实现快速失败反馈:立即标记损坏的流程。
  • 部署后 bug 减少了 60% 以上。
  • 使开发人员能够在问题到达 QA 之前解决它们。

🚀 案例研究 3:加速旅行聚合器功能发布

场景

一个旅行聚合平台需要发布一个经过改进的航班预订功能。跨 10 多个页面的手动回归测试耗时数天,并阻碍了发布。

挑战

缩短上市时间的压力无法超越手动测试周期,存在延迟或质量下降的风险。

使用 Selenium 和页面对象模型的解决方案

一位 QA 自动化负责人引入了 C# 中的页面对象模型 (POM) 结构。Selenium WebDriver 脚本封装了页面元素和操作(搜索航班、应用过滤器、支付案例)。自动化测试在 GitLab CI 上每晚触发。

结果

  • 测试时间从 3 天缩短到仅 4 小时。
  • 跨多个功能重用脚本,将脚本编写工作量减少了 50%。
  • 信心增加:发布按计划进行,bug 报告最少。

QTP 相对于 Selenium 的优势

QTP Selenium
可以测试Web 和桌面应用程序 只能测试 Web 应用程序
附带内置对象库 没有内置对象库
因为它是一个功能齐全的 IDE,所以自动化速度比 Selenium 快 自动化速度较慢,因为它没有原生 IDE,只能使用第三方 IDE 进行开发。
数据驱动测试更容易执行,因为它内置了全局和本地数据表 数据驱动测试更麻烦,因为您必须依赖编程语言的功能来设置测试数据的值。
可以访问浏览器内的控件(例如收藏夹栏、地址栏、后退和前进按钮等) 无法访问待测 Web 应用程序之外的元素
提供专业的客户支持 不提供官方用户支持。
具有将测试数据导出为外部格式的原生功能 不具备将运行时数据导出为外部格式的原生功能
内置参数化支持 可以通过编程进行参数化,但实现起来很困难。
自动生成测试报告 不提供生成测试/缺陷报告的原生支持。

尽管 QTP 显然具有更高级的功能,但 Selenium 在三个主要方面优于 QTP:

  • 成本(因为 Selenium 完全免费)
  • 灵活性(因为它支持多种编程语言、浏览器和平台)
  • 并行测试(QTP 具备此功能,但只能与 Quality Center 结合使用)

摘要

  • 整个 Selenium 软件测试套件由四个组件组成
  • Selenium IDE,一个 Firefox 和 Chrome 附加组件,您只能用它来创建相对简单的测试用例和测试套件。
  • Selenium Remote Control,也称为 Selenium 1,是第一个允许用户使用编程语言创建复杂测试的 Selenium 工具。
  • WebDriver,是更新的突破,它允许您的测试脚本直接与浏览器通信,从而从操作系统级别控制浏览器。
  • Selenium Grid 也是一个与 Selenium RC 一起使用的工具,用于在不同浏览器和操作系统上执行并行测试。
  • Selenium RC 和 WebDriver 合并形成 Selenium 2。
  • Selenium 在成本和灵活性方面比 Microfocus UFT One 更具优势。