Selenium 测试:完整的分步教程
自动化测试已成为现代软件交付中不可或缺的一部分。如果您从事这一行业,您可能已经感受到了更快推出产品和新功能、保持高质量和满足用户期望的压力。
幸运的是,自动化测试可以显著提高结果准确性(最高可达 43%)并提高团队敏捷性(42%)。但要实现这些好处,您需要合适的工具来让您的工作更轻松。
这时 Selenium 就可以发挥作用了。
它非常灵活,可让您在不同的环境、浏览器和工作流程中工作。基本上,它可以适应您的测试方法。
最好的部分是什么?我们准备了本指南,带您了解 Selenium 测试的基本知识 — 它是什么、如何设置以及如何编写您的第一个自动化测试。这是有效应对您在现实世界的 Selenium 测试中面临的挑战的必读内容。
让我们开始吧。
什么是硒?

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

您是否曾经想过,为什么 Selenium 的架构是这样的,以及它如何如此有效地解决现实世界的测试挑战?让我们回顾它的演变过程,揭开其设计背后的故事。
**2004:**当 ThoughtWorks 的 Jason Huggins 开发出一种使 Web 应用程序测试更高效的工具时,Selenium 便应运而生。

它最初被称为“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 使用集线器和节点架构运行,其中集线器协调测试执行请求,节点负责在指定的浏览器或设备上运行测试。
硒如何发挥作用?

当您开始使用此工具时,您首先需要使用其库以您喜欢的编程语言(例如 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 测试?
首先,视觉回归工具的兴起表明,传统测试无法始终捕捉到 UI 差异。但如果 Selenium 集成了对视觉测试的原生支持,情况就不同了。
您不需要断言按钮是否可以点击,而是可以验证按钮是否完全对齐、颜色是否正确,以及在所有设备上的外观是否相同。
Selenium 脚本可能包含诸如“assertVisualConsistency(page, “baseline_screenshot”)”之类的命令,并且任何 UI 漂移都会被自动标记。
您听说过量子计算的巨大飞跃吗?这听起来可能像科幻小说,但最终可能会影响 Selenium 测试。
量子算法可以以指数级速度处理大量测试套件,从而实现跨数百个环境的实时测试。这可以使大规模跨浏览器和跨设备测试即时完成。
最后,想象一个拖放界面,您可以在其中直观地定义测试场景,然后 Selenium 生成底层代码。虽然它传统上是开发人员的工具,但未来可能会带来无代码或低代码扩展。
这将降低非技术测试人员的进入门槛,同时保持 Selenium 对高级用户的灵活性。
使用 TestGrid 增强您的 Selenium 测试
TestGrid 是一个一体化平台,旨在确保您的 Web 应用程序在主流浏览器(如 Chrome、Firefox、Safari、Opera 和 Edge)以及各种操作系统和设备上完美运行。
借助 TestGrid,您可以在云端或本地运行自动化 Selenium 测试,从而可以灵活地在最适合您的任何地方进行测试。其直观的界面让测试设置和管理变得轻而易举 — 即使您不是技术专家。
是什么让TestGrid脱颖而出?
准备好将您的 Selenium 测试提升到新的水平吗?
结论
Selenium 测试通过强大的自动化功能简化了 Web 应用程序测试。掌握其工具和技术可提高测试效率,确保为现代应用程序提供可靠、可扩展和高质量的软件交付。