Selenium 测试:完整的分步教程

自动化测试已成为现代软件交付中不可或缺的一部分。如果您从事这一行业,您可能已经感受到了更快推出产品和新功能、保持高质量和满足用户期望的压力。

幸运的是,自动化测试可以显著提高结果准确性(最高可达 43%)并提高团队敏捷性(42%)。但要实现这些好处,您需要合适的工具来让您的工作更轻松。

这时 Selenium 就可以发挥作用了。

它非常灵活,可让您在不同的环境、浏览器和工作流程中工作。基本上,它可以适应您的测试方法。

最好的部分是什么?我们准备了本指南,带您了解 Selenium 测试的基本知识 — 它是什么、如何设置以及如何编写您的第一个自动化测试。这是有效应对您在现实世界的 Selenium 测试中面临的挑战的必读内容。

让我们开始吧。

什么是硒?

Image description

Selenium 是一款开源软件,包含一系列用于自动化 Web 浏览器的工具和库。它使您能够模拟用户操作,例如单击、键入、导航和与 Web 元素交互,以测试您的应用在不同条件下的表现。

在 Selenium 上,您可以在 Chrome、Firefox、Safari 和 Edge 等现代 Web 浏览器上编写功能测试,或者在无头浏览器(例如 Chrome Headless)中运行测试以加快执行速度,尤其是在 CI/CD 管道中。它还可以在 Windows、macOS 和 Linux 上运行。

Selenium 提供了一种名为 Selenese 的测试领域特定语言,可以使用多种流行的编程语言编写测试,包括 JavaScript(Node.js)、Groovy、PHP、C#、Perl、Scala、Python 和 Ruby。

您可以开始使用它而无需支付任何许可费用。其活跃的社区定期提供修复、插件和增强功能。您还可以找到大量用于故障排除的在线文档和教程。

硒的简史

Image description

您是否曾经想过,为什么 Selenium 的架构是这样的,以及它如何如此有效地解决现实世界的测试挑战?让我们回顾它的演变过程,揭开其设计背后的故事。

**2004:**当 ThoughtWorks 的 Jason Huggins 开发出一种使 Web 应用程序测试更高效的工具时,Selenium 便应运而生。

Image description

它最初被称为“JavaScriptTestRunner”,后来被重新命名为Selenium——这是对竞争对手Mercury Interactive的嘲讽,因为硒元素可以抵抗汞中毒。

**2005:** Selenium Remote Control (RC) 的推出是为了克服 JavaScript 的同源策略。它允许测试人员使用各种编程语言编写脚本,并通过充当基于服务器的代理在不同的浏览器中运行它们。

**2006:** Selenium IDE 作为一个简单的 Firefox 插件出现。它的录制和回放功能让非程序员也能实现测试自动化。

**2008 年:** Simon Stewart 推出了 Selenium WebDriver,它无需服务器即可实现直接浏览器自动化。从 RC 到 WebDriver 的转变标志着一次重大飞跃,RC 于 2011 年随着 Selenium 2.0 的推出而正式弃用。

**2011:**Selenium Grid 彻底改变了测试执行方式,允许测试在多个浏览器和环境中并行运行,使大规模测试更加高效。

**2018 年:**Selenium WebDriver 成为 W3C 官方标准。

**2021:**Selenium 4 首次亮相,进行了重大改进,包括原生 W3C WebDriver 支持、改进的 Selenium Grid 以及与开发人员工具的更深层次集成。

**2023:**全年的更新重点是扩展 WebDriver BiDi(双向协议)支持和增强 Selenium Manager 的依赖管理。Selenium 4.16 以性能和稳定性增强结束了这一年。

**2024:**Selenium 4.27 引入了与 Chrome DevTools 协议 (CDP) 的扩展集成、增强了对 WebDriver BiDi 的支持、改进了 Selenium Grid 的性能以及更好地处理异步 JavaScript 执行。

硒的成分

Selenium 不只是一个工具,而是一套工具,每个组件都有特定的用途。它们共同为自动化测试创建了一个强大的生态系统。让我们在下一节中对它们进行分解。

1.Selenium IDE(集成开发环境)

Chrome 和 Firefox 上的此浏览器扩展程序允许您记录、编辑和重放测试用例。使用 Selenium IDE,您无需编写任何代码即可开始使用。它最适合快速原型设计和创建简单的测试脚本,而无需深入编程。

2. Selenium WebDriver

Selenium WebDriver 是一款功能强大的工具,可让您使用代码直接与浏览器交互。它可以处理动态 Web 元素和高级交互(如拖放或文件上传),并使用驱动程序可执行文件管理特定于浏览器的功能。Selenium WebDriver 也是移动浏览器测试中的关键组件。

3. Selenium 网格

当您的项目扩展并且您需要在不同的浏览器、操作系统或设备上运行测试时,Selenium Grid 就会介入。

它可让您将测试分布到多台机器上以加快执行速度。Selenium Grid 使用集线器和节点架构运行,其中集线器协调测试执行请求,节点负责在指定的浏览器或设备上运行测试。

硒如何发挥作用?

Image description

当您开始使用此工具时,您首先需要使用其库以您喜欢的编程语言(例如 Java、Python 或 C#)编写脚本。您的脚本就像一组针对浏览器的指令 - 它告诉浏览器要做什么,例如打开网页或填写表格。

脚本准备就绪后,Selenium 的 WebDriver 会从中获取命令并将其发送到浏览器驱动程序。然后,驱动程序将命令转换为浏览器可以理解的格式。W3C WebDriver 协议是用于通信的标准,取代了较旧的 JSON Wire 协议。

下一步,浏览器驱动程序会将这些翻译的命令转换为浏览器中的实际操作。无论您是单击链接还是滚动页面,它都会像您手动执行一样执行这些操作。

浏览器完成每个动作后,都会响应浏览器驱动程序。

此反馈将传递给 WebDriver,后者将其传达回您的脚​​本。这样,它就可以知道操作是否成功(如果有任何错误),或者是否需要根据浏览器的当前状态采取进一步措施。

谁使用 Selenium?

Selenium 是软件开发生命周期 (SDLC) 中技术团队广受青睐的工具。以下是这些主要群体使用它的方式:

1. 开发人员

他们使用 Selenium 来验证前端代码在实际场景中的表现。它有助于在开发过程中捕捉特定于浏览器的怪癖,例如 JavaScript 执行问题或 CSS 渲染差异。

2. DevOps 和自动化工程师

借助 Selenium,DevOps 和自动化工程师可以轻松创建可扩展且强大的测试管道。他们可以在多个浏览器和环境中并行执行数百个测试,从而确保开发团队获得更快的反馈循环。

此外,Selenium 与 Jenkins、GitHub Actions 和 Kubernetes 等工具的兼容性简化了 CI/CD 工作流程,从而最大限度地降低了将有缺陷的代码部署到生产中的风险。

3.软件测试员和质量保证专家

Selenium 的用途不仅限于自动点击 UI 元素。软件测试人员可以利用它编写脚本来模拟真实用户的行为,例如登录、提交表单和完成交易。

另一方面,对于 QA 专家来说,Selenium 与回归测试套件很好地集成,以确保应用程序更新不会破坏关键功能,并且无论更改频率如何都能继续提供一致的性能。

Selenium 自动化测试的先决条件

让我们讨论一下为 Selenium 软件测试做好充分准备需要做些什么。

1. 了解编程基础知识

首先,您应该能够熟练实现页面对象模型 (POM) 或工厂方法等设计模式。这些将帮助您创建更易于维护的模块化、可重复使用的测试脚本。

有效处理常见问题(如未找到元素异常或超时)也至关重要,这样您的测试才能保持可靠性。如果您的应用严重依赖 JavaScript,那么了解如何在 Selenium 中管理异步操作将减少不稳定的测试。

2. 获得异步操作和定位器方面的专业知识

由于现代 Web 应用经常动态更新文档对象模型 (DOM),因此传统定位器并不可靠。要动态定位元素,您必须掌握灵活的 XPath 表达式和 CSS 选择器。

利用 Selenium 4 的相对定位器。它们使您能够根据元素相对于其他元素的位置来查找元素,从而简化复杂布局的测试。

3.熟悉测试框架

您还需要了解流行的测试框架,例如 TestNG、JUnit 或 PyTest。这些框架可帮助您有效地组织和执行测试套件。

它们具有并行执行、依赖管理和详细范围报告等基本功能,所有这些功能使得管理更大的测试环境变得更加容易。

将这些框架与 Selenium 集成将使您的测试具有可扩展性和可维护性,特别是当您在协作或 CI/CD 繁重的环境中工作时。

4. 了解浏览器驱动程序和配置

不要忘记浏览器驱动程序及其配置。为了避免兼容性问题,请使用 Selenium Manager 等工具自动调整浏览器和 WebDriver 版本。

如果您跨多个浏览器或平台进行测试,Docker 等工具可以通过提供一致的执行环境来简化设置。

5. 将 Selenium 与 CI/CD 管道集成

一个重要方面是将 Selenium 测试集成到 CI/CD 管道中。Jenkins、GitLab CI/CD 或 GitHub Actions 等工具可以自动化您的测试,以便每次更新代码时都可以运行测试。这可以确保尽早发现问题,从而节省时间和精力。

您还可以利用 TestGrid 等云测试平台在各种设备和浏览器上运行测试,而无需自己管理基础设施。

6. 培养高效故障排除技能

调试是另一项关键技能。您应该熟悉用于检查元素、分析控制台日志和调试网络调用的浏览器开发人员工具。

此外,了解如何使用 IDE 的调试工具进行逐步测试和日志分析将使脚本中的问题诊断更快、更高效。

7. 通过 API 和 REST 测试扩展测试技能

许多现代应用程序严重依赖 API,将 Selenium 的 UI 测试与 API 测试相结合可为您提供更广泛的覆盖范围。Postman 或 RestAssured 等工具非常适合此用途,可以很好地补充您的 Selenium 专业知识。

如何在 Selenium 中运行自动化测试

了解了先决条件后,让我们逐步了解 Selenium 自动化测试。我们还将讨论一些示例和实用见解,以帮助您入门。

1. 确定测试环境

在执行任何操作之前,请先设置好工具。安装 Selenium WebDriver、浏览器驱动程序(例如 Chrome 的 ChromeDriver 或 Firefox 的 GeckoDriver)以及您计划使用的任何测试框架,例如 TestNG 或 PyTest。

确保您的 WebDriver 版本与您的浏览器版本匹配,以避免出现兼容性问题。您可以使用 Selenium Manager 自动确保您的 WebDriver 版本与您的浏览器版本匹配。

从小处着手,确保一切正常——例如编写脚本来打开网页并打印标题。一旦有信心,就可以添加其他功能,例如与元素交互或验证页面行为。

另外,请记住保持依赖项更新以避免发生重大变化。

2. 清晰地组织你的脚本

结构良好的脚本可以在发生变更时节省您的时间,并使协作更加容易。当您在团队中工作时,其他人应该能够理解和扩展您的测试,而无需快速解开混乱的代码。因此,花一些时间在脚本结构上。

使用 POM 将测试逻辑与 UI 细节分开。例如,如果您正在测试登录页面,请创建一个“LoginPage”类来处理用户名字段、密码字段和登录按钮等元素。然后,从测试脚本中调用这些方法,而不是每次都重写定位器。

3. 编写有效的测试用例

测试用例应该清晰、具体且可操作。假设您正在测试一个电子商务网站。在这种情况下,一个测试可能会检查搜索“笔记本电脑”是否会显示相关产品,另一个测试可能会确认点击“添加到购物车”是否会真正添加商品。

还要考虑极端情况。如果用户输入“laptop123$$$”或包含字母数字和特殊字符的类似输入会怎么样?搜索仍然有效吗?参数化测试可让您覆盖多种场景而无需重复代码。

4. 在本地运行测试

在扩展之前,请先在本地进行测试,因为这是验证脚本的最简单方法。测试密码更改功能?在本地浏览器上运行它以确认输入和输出符合预期。

本地运行也非常适合调试。如果出现故障,您可以暂停执行,检查浏览器并实时调整脚本。使用无头模式跳过 UI 渲染。当您不需要查看浏览器的运行情况但想要结果时,它是完美的选择。

一旦一切在本地正常运行,您就可以放心地在更大的环境(如 CI/CD 管道或分布式设置)上运行它。

5. 并行运行多个测试

为什么?因为这样可以节省时间。

这里有一个场景:如果您需要在 Chrome 和 Firefox 上测试搜索、登录和结帐功能,您可以配置 Selenium Grid 或使用 TestNG 的并行执行。

并行执行还能更快地发现特定于浏览器的问题。例如,下拉菜单在 Chrome 中可能有效,但在 Firefox 中却表现异常。尽早修复这些差异可为您省去日后的麻烦。

6.处理动态元素

动态元素可能比较棘手,但它们在现代网络应用中无处不在。想象一下,一个页面的“提交”按钮的 ID 每次重新加载时都会发生变化。您可以使用 Selenium 编写代码片段来定位并与其交互。

使用灵活的 XPath 表达式来标识文本包含单词“提交”的按钮元素。这样,代码就可以确保自动化保持稳健并适应网页结构的变化。

7.定期调试和记录

当测试失败时,日志可以拯救你。例如,如果登录测试失败,你可以记录当前 URL 和页面源代码以了解问题所在。使用日志库,如 Python 的内置“日志”模块、Java 中的 Log4j 或 SLF4J。

除了日志之外,故障截图也非常有用。配置测试以在发生故障时自动截取截图 — 这是识别元素缺失或 UI 意外更改等问题的快速方法。

8. 在 CI/CD 管道中运行测试

使用 Jenkins 或 GitHub Actions 等工具自动化测试。

例如,每次您的团队推送新代码时,您的管道都可以自动提取最新更改、运行测试并报告结果。这就像 24/7 全天候监控您的项目。此设置还可以通过提供即时反馈来加快开发速度。

Selenium 软件测试中的独特挑战

虽然 Selenium 是用于浏览器自动化的强大工具,但它也存在一些障碍 — 其中一些障碍可能并不明显。以下是 Selenium 软件测试中比较棘手的方面:

  • 尽管 Selenium 支持多种浏览器,但浏览器呈现页面的方式略有不同可能会导致测试结果不一致。因此,定期在所有支持的浏览器中验证测试以确保准确性至关重要。
  • 大规模运行 Selenium 测试需要强大的基础架构。设置和管理 Selenium Grid 或使用云测试平台可以缓解这一问题,但它们可能会带来额外的成本和专业知识。
  • Selenium 测试依赖于与浏览器版本匹配的 WebDriver。当浏览器更新时,WebDriver 通常会滞后,从而导致兼容性问题。使用 Selenium Manager(在 Selenium 4.6 中引入)自动处理驱动程序版本管理。
  • Captchas 和 MFA 经常会产生 Selenium 无法绕过的问题。因此,最好考虑禁用 Captchas 的测试环境,或使用支持 CAPTCHA 解析服务的浏览器自动化 API 等工具。
  • 每次发生小变化时更新定位器和脚本可能会非常耗时。使用 AI 驱动的工具实现自我修复定位器,当 UI 发生变化时,定位器会自动调整。
  • 硒测试的未来:前景如何?

    随着网络的发展,Selenium 也在不断发展。但它的下一步是什么?哪些前瞻性趋势和可能性可以塑造 Selenium 测试?

    首先,视觉回归工具的兴起表明,传统测试无法始终捕捉到 UI 差异。但如果 Selenium 集成了对视觉测试的原生支持,情况就不同了。

    您不需要断言按钮是否可以点击,而是可以验证按钮是否完全对齐、颜色是否正确,以及在所有设备上的外观是否相同。

    Selenium 脚本可能包含诸如“assertVisualConsistency(page, “baseline_screenshot”)”之类的命令,并且任何 UI 漂移都会被自动标记。

    您听说过量子计算的巨大飞跃吗?这听起来可能像科幻小说,但最终可能会影响 Selenium 测试。

    量子算法可以以指数级速度处理大量测试套件,从而实现跨数百个环境的实时测试。这可以使大规模跨浏​​览器和跨设备测试即时完成。

    最后,想象一个拖放界面,您可以在其中直观地定义测试场景,然后 Selenium 生成底层代码。虽然它传统上是开发人员的工具,但未来可能会带来无代码或低代码扩展。

    这将降低非技术测试人员的进入门槛,同时保持 Selenium 对高级用户的灵活性。

    使用 TestGrid 增强您的 Selenium 测试

    TestGrid 是一个一体化平台,旨在确保您的 Web 应用程序在主流浏览器(如 Chrome、Firefox、Safari、Opera 和 Edge)以及各种操作系统和设备上完美运行。

    借助 TestGrid,您可以在云端或本地运行自动化 Selenium 测试,从而可以灵活地在最适合您的任何地方进行测试。其直观的界面让测试设置和管理变得轻而易举 — 即使您不是技术专家。

    是什么让TestGrid脱颖而出?

  • 忘记复杂的编码——记录和回放测试或使用人工智能驱动的低代码选项来简化您的测试流程。
  • 一次执行多个测试可大幅缩短测试时间。
  • 从详细报告中获取切实可行的见解,以改善应用的性能和安全性。其智能功能可自动修复损坏的测试并检测 UI 更改,从而减少维护麻烦。
  • 准备好将您的 Selenium 测试提升到新的水平吗?

    结论

    Selenium 测试通过强大的自动化功能简化了 Web 应用程序测试。掌握其工具和技术可提高测试效率,确保为现代应用程序提供可靠、可扩展和高质量的软件交付。