自动化测试已成为现代软件交付中不可协商的一部分。如果您在这个领域运营,您可能已经感受到更快推出产品和新功能、保持高质量并满足用户期望的压力。
您很幸运 - 自动化测试可以显着提高结果准确性(高达 43%)并提高团队敏捷性(高达 42%)。但要实现这些好处,您需要合适的工具来让您的工作变得更轻松。
这就是 Selenium 发挥作用的地方。
它非常灵活,让您可以跨不同的环境、浏览器和工作流程工作。基本上,它会适应您的测试方法。
最好的部分?我们准备了本指南,引导您了解 Selenium 测试的要点——它是什么、如何设置以及如何编写您的第一个自动化测试。这是有效应对现实世界 Selenium 测试中面临的挑战的必读之作。
让我们开始吧。
Selenium 是开源软件,包含一系列用于自动化 Web 浏览器的工具和库。它使您能够模拟用户操作,例如单击、键入、导航以及与 Web 元素交互,以测试您的应用程序在不同条件下的行为。
在 Selenium 上,您可以跨现代 Web 浏览器(例如 Chrome、Firefox、Safari 和 Edge)编写功能测试,或者在无头浏览器(例如 Chrome Headless)中运行测试以加快执行速度,尤其是在 CI/CD 管道中。它还可以在 Windows、macOS 和 Linux 上运行。
Selenium 提供了一种名为 Selenese 的测试领域特定语言,可以用许多流行的编程语言编写测试,包括 JavaScript (Node.js)、Groovy、PHP、C#、Perl、Scala、Python 和 Ruby。
您可以开始使用它,而无需支付任何许可费用。其活跃的社区定期提供修复、插件和增强功能。您还可以找到大量在线文档和教程来进行故障排除。
您有没有想过为什么 Selenium 的架构是这样构建的,以及它如何如此有效地解决现实世界的测试挑战?让我们回顾它的演变,揭开其设计背后的故事。
2004 年:Selenium 的诞生是出于需要,ThoughtWorks 的 Jason Huggins 开发了一种工具来提高 Web 应用程序测试的效率。
它最初被称为“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 不仅仅是一个工具,而是一套工具,每个组件都有特定的用途。他们共同创建了一个强大的自动化测试生态系统。让我们在下一节中将它们全部分解。
Chrome 和 Firefox 上的此浏览器扩展允许您记录、编辑和重放测试用例。使用 Selenium IDE,您无需编写任何代码即可开始使用。它最适合快速原型设计和创建简单的测试脚本,而无需深入编程。
Selenium WebDriver 是一个强大的工具,可让您使用代码直接与浏览器交互。它可以处理动态 Web 元素和高级交互(例如拖放或文件上传),并使用驱动程序可执行文件管理特定于浏览器的功能。 Selenium WebDriver 也是移动浏览器测试中的重要组件。
当您的项目扩展并且需要跨不同浏览器、操作系统或设备运行测试时,Selenium Grid 就会介入。
它使您能够将测试分布在多台机器上以加快执行速度。 Selenium Grid 使用集线器和节点架构运行,其中集线器协调测试执行请求,节点处理在指定浏览器或设备上运行测试。
当您开始使用此工具时,您将首先使用其库以您喜欢的编程语言(例如 Java、Python 或 C#)编写脚本。您的脚本就像浏览器的一组指令 - 它告诉浏览器要做什么,例如打开网页或填写表单。
一旦脚本准备就绪,Selenium 的 WebDriver 就会从中获取命令并将其发送到浏览器驱动程序。然后,驱动程序将命令转换为浏览器可以理解的格式。 W3C WebDriver 协议是用于通信的标准,取代了旧的 JSON Wire 协议。
下一步,浏览器驱动程序将这些翻译后的命令转换为浏览器中的实际操作。无论您单击链接还是滚动页面,它都会执行这些操作,就像您手动执行它们一样。
浏览器完成每个操作后,会响应浏览器驱动程序。
此反馈将传递给 WebDriver,WebDriver 将其传回您的脚本。如果有任何错误,或者是否需要根据浏览器的当前状态采取进一步的步骤,它就可以通过这种方式知道操作是否成功。
Selenium 是软件开发生命周期 (SDLC) 技术团队广泛青睐的工具。以下是这些关键群体的使用方式:
他们使用 Selenium 来验证前端代码在现实场景中的行为方式。它有利于在开发过程中捕获特定于浏览器的怪癖,例如 JavaScript 执行问题或 CSS 渲染差异。
使用 Selenium,创建可扩展且强大的测试管道对于 DevOps 和自动化工程师来说变得轻而易举。他们可以跨多个浏览器和环境并行执行数百个测试,确保开发团队更快的反馈循环。
此外,Selenium 与 Jenkins、GitHub Actions 和 Kubernetes 等工具的兼容性简化了 CI/CD 工作流程,从而最大限度地降低了将有缺陷的代码部署到生产中的风险。
Selenium 的用途不仅仅是自动点击 UI 元素。软件测试人员可以利用它来编写模仿现实世界用户行为的脚本,例如登录、提交表单和完成交易。
另一方面,对于 QA 专家来说,Selenium 与回归测试套件完美集成,以确保应用程序更新不会破坏关键功能,并无论更改频率如何,都能继续提供一致的性能。
让我们讨论一下为 Selenium 软件测试做好充分准备需要做哪些准备。
首先,您应该能够轻松地实现页面对象模型 (POM) 或工厂方法等设计模式。这些将帮助您创建更易于维护的模块化、可重用的测试脚本。
有效处理常见问题(例如未找到元素的异常或超时)也至关重要,这样您的测试才能保持可靠。如果您的应用严重依赖 JavaScript,了解如何在 Selenium 中管理异步操作将减少不稳定的测试。
由于现代 Web 应用程序经常动态更新文档对象模型 (DOM),因此传统定位器不可靠。要动态定位元素,您必须掌握灵活的 XPath 表达式和 CSS 选择器。
利用 Selenium 4 的相对定位器。它们使您能够根据元素相对于其他元素的位置查找元素,从而简化复杂布局的测试。
您还需要了解流行的测试框架,例如 TestNG、JUnit 或 PyTest。这些可以帮助您有效地组织和执行测试套件。
它们具有并行执行、依赖管理和详细范围报告等基本功能,所有这些都使管理更大的测试环境变得更加容易。
将这些框架与 Selenium 集成将使您的测试具有可扩展性和可维护性,特别是当您在协作或 CI/CD 密集的环境中工作时。
我们不要忘记浏览器驱动程序及其配置。为了避免兼容性问题,请使用 Selenium Manager 等工具自动对齐浏览器和 WebDriver 版本。
如果您要跨多个浏览器或平台进行测试,Docker 等工具可以通过提供一致的执行环境来简化设置。
其中一项重要任务是将 Selenium 测试集成到 CI/CD 管道中。 Jenkins、GitLab CI/CD 或 GitHub Actions 等工具可以自动化您的测试,以便在代码更新时运行它们。这可确保及早发现问题,从而节省时间和精力。
您还可以利用 TestGrid 等云测试平台在各种设备和浏览器上运行测试,而无需自行管理基础设施。
调试是另一项关键技能。您应该熟悉用于检查元素、分析控制台日志和调试网络调用的浏览器开发人员工具。
此外,了解如何使用 IDE 的调试工具进行逐步测试和日志分析将使诊断脚本中的问题变得更快、更高效。
许多现代应用程序严重依赖 API,将 Selenium 的 UI 测试与 API 测试相结合可以为您提供更广泛的覆盖范围。像 Postman 或 RestAssured 这样的工具非常适合此目的,并且可以很好地补充您的 Selenium 专业知识。
先决条件排除后,让我们逐步完成 Selenium 自动化测试。我们还将讨论一些示例和实用见解来帮助您入门。
在做任何事情之前,先设置好你的工具。安装 Selenium WebDriver、浏览器驱动程序(例如适用于 Chrome 的 ChromeDriver 或适用于 Firefox 的 GeckoDriver)以及您计划使用的任何测试框架,例如 TestNG 或 PyTest。
确保您的 WebDriver 版本与您的浏览器版本匹配,以避免出现兼容性问题。您可以使用 Selenium Manager 自动确保您的 WebDriver 版本与您的浏览器版本匹配。
从小事做起,确保一切正常 - 例如编写脚本来打开网页并打印标题。一旦有信心,就可以添加附加功能,例如与元素交互或验证页面行为。
此外,请记住更新您的依赖项以避免重大更改。
结构良好的脚本可以在发生更改时节省您的时间并使协作更轻松。当您在团队中工作时,其他人应该能够理解并扩展您的测试,而无需快速理清混乱的代码。因此,花一些时间构建脚本。
使用 POM 将测试逻辑与 UI 细节分离。例如,如果您正在测试登录页面,请创建一个“LoginPage”类来处理用户名字段、密码字段和登录按钮等元素。然后,从测试脚本中调用这些方法,而不是每次都重写定位器。
测试用例应该清晰、具体且可操作。假设您正在测试一个电子商务网站。在这种情况下,一项测试可能会检查搜索“笔记本电脑”是否会显示相关产品,而另一项测试可能会确认单击“添加到购物车”实际上会添加一个商品。
也要考虑边缘情况。如果用户输入“laptop123$$$”或包含字母数字和特殊字符的类似输入怎么办?搜索仍然有效吗?参数化您的测试可以让您覆盖多个场景,而无需重复代码。
在扩大规模之前,请在本地进行测试,因为这是验证脚本的最简单方法。测试密码更改功能?在本地浏览器上运行它以确认输入和输出符合预期。
本地运行也非常适合调试。如果出现问题,您可以暂停执行、检查浏览器并实时调整脚本。使用无头模式跳过 UI 渲染。当您不需要查看浏览器运行情况但想要结果时,它是完美的。
一旦本地一切正常运行,您就可以放心地在 CI/CD 管道或分布式设置等更大的环境中运行它。
为什么?因为这样可以节省时间。
这里有一个场景:如果您需要测试 Chrome 和 Firefox 上的搜索、登录和结账功能,您可以配置 Selenium Grid 或使用 TestNG 的并行执行。
并行执行还可以更快地发现特定于浏览器的问题。例如,下拉菜单可能在 Chrome 中工作,但在 Firefox 中表现奇怪。及早解决这些差异可以为您省去以后的麻烦。
动态元素可能很棘手,但它们在现代网络应用程序中无处不在。想象一下,每次重新加载时,“提交”按钮的 ID 都会发生变化的页面。您可以使用 Selenium 编写代码片段来定位它并与之交互。
使用灵活的 XPath 表达式来识别文本包含“提交”一词的按钮元素。这样,代码可确保自动化保持稳健并适应网页结构的变化。
当测试失败时,日志可以拯救你。例如,如果登录测试失败,您可以记录当前 URL 和页面源以了解出了什么问题。使用日志库,例如 Python 的内置“日志记录”模块、Java 中的 Log4j 或 SLF4J。
除了日志之外,失败的屏幕截图也非常宝贵。配置您的测试以在出现故障时自动捕获屏幕截图 - 这是识别缺少元素或意外 UI 更改等问题的快速方法。
使用 Jenkins 或 GitHub Actions 等工具自动化您的测试。
例如,每次您的团队推送新代码时,您的管道都可以自动提取最新更改、运行测试并报告结果。这就像有一双额外的眼睛全天候 (24/7) 监视您的项目。此设置还可以通过提供即时反馈来加快开发速度。
虽然 Selenium 是浏览器自动化的强大工具,但它也有自己的一组障碍 - 其中一些可能不会立即明显。以下是 Selenium 软件测试中比较棘手的方面:
随着网络的发展,Selenium 也在不断发展。但下一步是什么?哪些前瞻性趋势和可能性可以塑造 Selenium 测试?
首先,视觉回归工具的兴起表明,传统测试并不总能捕获 UI 差异。但如果 Selenium 集成了对视觉测试的本机支持,则情况并非如此。
您可以验证按钮是否完美对齐、颜色正确以及在所有设备上看起来都相同,而不是断言按钮可点击。
Selenium 脚本可能包含“assertVisualConsistency(page, “baseline_screenshot”)”等命令,并且任何 UI 偏差都会自动标记。
您听说过量子计算的巨大飞跃吗?现在听起来可能像科幻小说,但这最终可能会影响 Selenium 测试。
量子算法可以以指数速度更快地处理大量测试套件,从而能够在数百个环境中进行实时测试。这可以使大规模跨浏览器和跨设备测试瞬间完成。
最后,想象一个拖放界面,您可以在其中直观地定义测试场景,然后 Selenium 生成底层代码。虽然它传统上是开发人员的工具,但未来可能会带来无代码或低代码扩展。
这将降低非技术测试人员的进入门槛,同时保持 Selenium 对高级用户的灵活性。
TestGrid 是一个一体化平台,旨在确保您的 Web 应用程序在 Chrome、Firefox、Safari、Opera 和 Edge 等主要浏览器以及各种操作系统和设备上完美运行。
借助 TestGrid,您可以在云端或本地运行自动化 Selenium 测试,让您能够灵活地在最适合您的地方进行测试。其直观的界面使设置和管理测试变得轻而易举 - 即使您不是技术专家。
是什么让 TestGrid 脱颖而出?
准备好将您的 Selenium 测试提升到新的水平了吗?
Selenium 测试通过强大的自动化功能简化了 Web 应用程序测试。掌握其工具和技术可以提高测试效率,确保现代应用程序的可靠、可扩展和高质量的软件交付。
来源:本文最初发表于 testgrid.io。
以上是Selenium 测试:完整的分步教程的详细内容。更多信息请关注PHP中文网其他相关文章!