发布时间:2025-11-04 20:17:59 来源:云智核 作者:数据库
【.com快译】不可否认,哪家强Selenium是自动用于功能性测试和Web应用测试领域的首选自动化框架之一。测试人员可以利用在线的化框Selenium Grid,在不同的哪家强浏览器和平台组合上,运行测试。自动不过,化框不知您是哪家强否已注意到,作为该领域的自动后起之秀--Cypress,正在以惊人的化框速度迎头赶上。Cypress也是哪家强一种用于测试Web应用的自动化开源测试框架。下面我将全方位地和您讨论Selenium和Cypress之间的自动各项差异,以便您在实际项目中,化框做出明智的哪家强选择。

作为一种广为流行的自动化开源测试框架,Selenium主要被用于Web应用测试和跨浏览器测试的化框场景中。Selenium WebDriver是Selenium套件的关键组件之一。
目前,Selenium支持诸如Python、网站模板Ruby、C#、JavaScript、Java、PHP等多种编程语言。它支持的自动化框架包括:Behave(一种流行的BDD框架)、JUnit、SpecFlow、MSTest、TestNG、PyTest、PyUnit、Mocha JS、Jest、WebDriverIO、以及Protractor等。
在使用Selenium开展自动化测试之前,开发人员需要在测试主机上下载并安装相应的浏览器驱动程序(如,Chrome的ChromeDriver、Firefox的GeckoDriver等),以及适当的Selenium语言驱动。

开源的Cypress项目目前被托管在GitHub上,其最新的版本是5.5.0。开发人员能够通过Cypress进行单元测试,WordPress模板编写端到端测试,以及开展集成测试。
与能够支持多种语言的Selenium WebDriver不同,Cypress仅能够支持JavaScript,不过它是精通JavaScript前端开发和自动化测试人员的首选。在对测试自动化框架的支持方面,Cypress仅支持Mocha JS框架。因此,我们可以认为Cypress的Web自动化测试用例,只在Mocha JS框架上,运用JavaScript编写而成的。
下图是Selenium WebDriver和Cypress,在过去六个月的下载趋势图。可见Cypress的下载量正在慢慢赶上Selenium。
下载比较图

来源--https://www.npmtrends.com/protractor-vs-selenium-webdriver
Selenium项目始于2004年。2006年推出的Selenium IDE,是一款原生的记录和回放工具,仅能够使用在Firefox上。当然,最新的Selenium IDE已经可以被用在Chrome上了。云服务器提供商它不但带有跨浏览器的支持,可用于并行测试,而且能够让自动化测试人员通过设置断点,来调试脚本。
当前,Selenium的最新稳定版本是Selenium 3.141.59。不过,Selenium 4(仍处于Alpha阶段)中的Selenium WebDriver是W3C的建议版本。由于JSON Wire协议将不再被用于与Web浏览器进行通信,因此自动化测试将能够更加无缝地协同工作在不同的浏览器(如Chrome、Firefox等)之间。

由于Selenium WebDriver和相应的浏览器使用通用的协议(即W3C协议)进行通信,因此开发人员往往认为Selenium 4具有更稳定且统一的特点。
Cypress是为开发人员和质量保证工程师打造的下一代前端测试工具,可被用来测试浏览器中运行的所有内容。与Selenium运行在浏览器外部不同,Cypress能够与应用程序在同一循环中被执行。也就是说,节点服务器(Node server)的进程能够与Cypress相互通信,同步并执行任务。由于可以访问到网络层,因此Cypress能够即时读取和更改网络的流量。
凭借着独特的DOM操作技术,Cypress的各项测试皆可访问到DOM中的Web元素、应用实例、计时器、以及服务worker等内容。
由于对自动化过程具有完全的掌控力,因此Cypress可以修改进出浏览器的所有内容,以及那些可能会干扰Web浏览器自动化功能的代码。同时,因为Cypress被安装在本地,所以可以通过访问操作系统,来控制各项自动化任务。

来源--https://docs.cypress.io/img/guides/parallelization/parallelization-overview.88fddb02.png
Cypress还可以与流行的CI/CD工具相集成,其中包括:Jenkins、Bamboo、Circle CI、Bitbucket、GitLab等。

您可以选择使用本地Selenium Grid,或是在LambdaTest之类基于云端的Selenium Grid上,进行可扩展的跨浏览器测试。
若要在本地Selenium Grid上进行跨浏览器测试,您必须事先安装浏览器的驱动程序,并在被Selenium支持的C#、Java、Python、Ruby等语言中选择一种。 若要在云端Selenium Grid上执行Selenium自动化,您必须在该平台上创建一个帐户,并在代码中调用适当的浏览器功能。下面,我们来讨论一个使用Selenium进行自动化测试的示例:
1. 在Windows 10上的Chrome 86.0中输入URL https://lambdatest.github.io/sample-todo-app/。
2. 选择前两个复选框。
3. 将“Happy Testing at LambdaTest”发送到id为sampletodotext的文本框处。
4. 单击添加按钮,并验证是否已添加了该文本。
5. 如果标题与预期的窗口标题不匹配,则需要声明。
下面是在LambdaTest的云端Selenium Grid上进行测试的Java代码:

由于Mocha框架运行在Node.js上,因此在安装Cypress之前,您需要安装依赖项软件包:Node JS和类似Visual Studio Code的IDE。
在安装好Node JS后,我们可以使用Node软件包管理器npm,从终端上安装Mocha和Cypress。
请在终端上运行以下命令,以安装Mocha:
npm install mocha
请在终端上运行以下命令,以安装Cypress:
npm install cypress
如上图绿色框所示,Cypress5.5.0已成功安装。接着,我们通过如下命令,来启动Cypress:
npx cypress open它将打开Cypress仪表板,以便运行各种测试:


Cypress在\integration\examples中提供了各种示例脚本:

若想快速检查测试,应将脚本放在同一个文件夹中。我们参照上述Selenium的测试案例,额外添加了wait usingcy.wait()方法,以及用于从DOM处获取所需的Web元素的cy.get()方法。

Cypress随附了丰富的API集,以及特定于浏览器的,诸如:执行按钮单击,设置视图等命令。
在以上代码中,cy.visit()用于打开特定的URL。它类似于driver.getSelenium。cy.get()方法则用于在DOM中定位特定的Web元素。一旦访问到了某个元素,就可以在该元素上执行适当的操作了。例如,我们找到元素--#sampletodotext,便可在文本框中输入“Happy Testing at LambdaTest”。cy.log()方法用于将消息打印到Cypress的控制台日志中。
在Cypress中,我们可以轻松地通过cy.contains()方法,来获取包含特定文本的DOM元素。

在安装了Cypress的主机上,有Chrome 86、Firefox 82、Edge 86和Electron 85,四种浏览器可供选择。

因此,为了执行上述测试,我们只需导航至Cypress仪表板中的测试标签,在首选浏览器(如Chrome 86)中单击测试文件(即Cypress_ToDoApp.js)即可。下图是正在进行的测试快照:

测试成功的快照如下图所示。可见,Cypress能够实时地显示执行状态,并提示代码中是否存在问题。

Cypress在如下方面大幅简化了开发人员和质量检查工程师的工作。
从Cypress的实现可以看出,Web元素没有使用标准的Web定位符(即XPath、Name等)来予以标识。那么,脚本将如何在DOM中定位元素呢?
Cypress在测试运行器中具有一项被称为“Selector Playground”的出色功能,可方便查找Web元素。您可以在待测试的URL旁,单击“Open Selector Playground”按钮,然后将鼠标悬停在需要提供详细信息的元素上。

通过点击该Web元素,其详细信息将会填充并显示在“cy.get”或“cy.contains”中(紧挨着显示测试文件名的区域)。

由于“Selector Playground”类似于Chrome(或Firefox)中的检查工具,因此用户无需额外学习该功能,即可修改并执行目标代码。
由于Cypress在运行测试时会捕获快照,因此它能够灵活地追溯到曾经执行过的某个时间点。具体而言,您只需将鼠标悬停在命令日志中的某个命令上,然后检查该步骤曾经的历史记录即可。Cypress默认最多可以保留50个测试值的快照和命令数据。
下面显示的是在LambdaTest的ToDo页面上第一个元素(li1)被单击后,执行“时间点跳转”的截图。


可见,当您想在测试脚本中检查某个特定操作的效果时,“时间点跳转”功能就能派上用场了。
如前所述,Cypress的测试是在浏览器内部执行的。由于被安装在本地,因此它可以获取Web浏览器内、外部发生的所有情况。这便是您可能不会察觉到Cypress测试中有任何网络延迟的主要原因。而且,由于Cypress使用的是与浏览器相同的DOM事件,因此其命令的执行速度要比Selenium快得多。
此外,Cypress使用Mocha的BDD语法,来实现单元测试和集成测试。Mocha JS本身提供了出色的异步支持。而Chai-jQuery、Sinn.JS和Sinon-Chai则为Mocha提供了编写带有错误消息的可读声明等功能。

下表是对上述讨论过的,有关Cypress和Selenium在不同方面的总结与比较。



可见,Cypress是一个新兴且不断迭代的工具,而Selenium是自动化测试领域的成熟工具。如果您精通JavaScript,并且正在寻找可以在本地主机上执行自动化测试的工具,那么请选用Cypress。同时如果您的Web应用是使用React、Angular等时下流行的JavaScript框架构建的,并且对于跨浏览器测试的要求不高,那么也请选用Cypress。
如果您希望测试代码能够在各种浏览器和操作系统上流畅运行,则请使用Selenium。此外,由于Selenium测试也可以在基于云的Selenium Grid上执行,因此您可以用到由LambdaTest平台提供的大规模并行测试的优势。
总之,Selenium和Cypress没有绝对的完胜者,但是它们之间的确有着众多差异。您可以从实际项目的测试覆盖率需求、团队的技能储备、以及长远发展的角度,通过试用,来选择最适合的一种工具。
原文标题:Selenium Vs. Cypress: Which Is Better in 2021?,作者:Himanshu Sheth
【译稿,合作站点转载请注明原文译者和出处为.com】
随便看看