Slenium已死?
selenium 已死?其他的框架例如 playwright, cypress 当立?这是去年一个广泛讨论的话题。对于我来说这个观点很明显是偏颇的,因为
- selenium 本身已经成为了 w3c 规范的一部分,现在市面上所有的浏览器都遵循这个规范
- selenium 本来就不是一个纯测试工具,它是为自动化而生,除了浏览器测试之外,selenium 还有很广泛的用途,而 playwright/cypress 则更专精于测试领域
- selenium 的 api 相当稳定,对于一些需要长期维护的项目来说这是非常有诱惑力的,而我去年用 playwright 做了一个项目,今年由于 api 升级,去年的代码基本上已经完全不可用了
所以对我来说,selenium 尽管已经徐娘半老,吸引力大不如前,但在某些场景下,selenium 仍然会是我的首选工具,就像是 vb/php 一样,尽管大家都已经看衰很多年了,但这些技术一直没有落幕退场。
selenium 官方可能也察觉到了这些广泛的讨论,昨天他们官网 blog 发了一篇文章,直接讨论 selenium 与其他工具的情感纠葛,上下文可能是不少人发博文比较 selenium 与其他工具,然后标题党一下,使得大家产生错觉:selenium 真的已经快死翘翘了。这篇内容专业简洁,适合给大家消除误解,原文地址:https://www.selenium.dev/blog/2024/selenium-vs-blog-posts/。
下面是全文翻译。
这篇博文讨论了那些比较 Selenium、Cypress 和 Playwright 的标题党文章。这些文章没有意义,也没有帮助。
作者:David Burns (@AutomatedTester) | 2024 年 1 月 9 日星期二
在博文中,关于自动化测试的标题党文章最容易的方式就是将 Selenium 与其他工具进行比较,并配以一个吸引人的标题,尤其是当它贬低现有工具时。
不幸的是,这可能会使人们对这些产品中的哪些功能可用产生困惑,尤其是当我们进行同类的过度类比时。
Selenium 一直是一个很好的浏览器自动化工具。对于该项目来说,幸运的是,它已经成为测试 Web 应用程序的首选工具近 20 年。该项目专注于构建越来越复杂的浏览器自动化的难点。项目的重点一直是稳定的 API 和可扩展性,以保证 Selenium 的运行。它没有关注人们如何进行测试,因为有非常好的测试框架可用,并且为 5 种不同的编程语言进行测试是一项非常重要的工程工作。
然而,这些博文中经常出现一些误解。
与 Playwright 和 Cypress 相比,设置浏览器和驱动程序太困难
过去确实如此,因为您需要下载驱动程序。对于 GeckoDriver 和 SafariDriver 来说,这并不太糟糕,因为它们可以优雅地处理浏览器升级。另一方面,对于基于 Chromium 的浏览器,您需要为每个新版本更新驱动程序。
现在,Selenium 已经自动处理了这个问题。如果找不到 ChromeDriver 或 EdgeDriver,它将使用 Selenium Manager 进行下载。自首次发布以来,它已经有了很大的改进,现在可能是最好的选择,因为最新版本的 Selenium 甚至可以下载并使用浏览器。与 Playwright 和 Cypress 相比,您不需要更新对 Selenium 的依赖以更新浏览器和驱动程序,您仍然使用与您的客户相同的浏览器,并且切换版本变得轻而易举:您也不必更改您正在使用的测试框架。此外,让我们不要忘记它使用的是 Google 推荐用于测试的浏览器。
设置 Test Runner 是一项艰巨的工作,而 Playwright 和 Cypress 已经内置了…
嗯…也许吧?使用 Selenium 设置端到端测试框架并不像一些人所认为的那么困难。真正困难的部分实际上是确保驱动程序位于正确的位置,我们已经解决了上面讨论的问题。一旦完成了这一步骤,Selenium 的方法允许您使用您最熟悉的任何测试框架。如果您希望使用“全家桶”方法,将 Selenium 与 Test Runner 紧密集成,那么诸如 SeleniumBase、Nightwatch、Serenity 等使用 Selenium 的众多项目可能是适合您的工具。
需要注意的一点是,Playwright 是与 Selenium 类似的唯一的多语言浏览器自动化框架。然而,如果您不使用 TypeScript 或 JavaScript,仍然需要自己设置 Test Runner。一些测试框架具有自动设置可能需要的 Fixture 的插件。在 JavaScript/TypeScript 领域,如果您真的需要一个内置的 Test Runner,那么像 NightwatchJS 这样的下游项目和像 WebdriverIO 这样的相关项目就可以满足您的需求。下游项目使用我们的库,相关项目有自己的库,但仍遵循 WebDriver 标准。
Playwright 和 Cypress 可以进行网络拦截,并允许我编写事件驱动的代码,而 Selenium 不能
自从 Selenium 4 发布以来,它已经能够提供这个功能。它非常好,以至于 Playwright 甚至建议您使用它来扩展您的测试。Selenium 项目不会很快删除这些功能,因为我们依赖于 WebDriver BiDi 规范的实现来替代它们。即使如此,Selenium 始终致力于确保升级不会在没有足够警告的情况下破坏任何功能。这就是为什么每种编程语言都提供了高级封装,例如 NetworkInterceptor,以隔离您的测试与底层技术的关系。
总结
从上面的内容可以看出,Selenium 仍然与市面上的产品一样出色。与 Cypress 或 Playwright 不同的是,Selenium 是一个由志愿者驱动的项目,而不是商业支持的项目。想要帮助我们吗?为什么不撰写一篇关于您如何使用上述功能的博文,或在社交媒体上发布这些功能如何使您的生活更轻松的帖子呢?