跳至主要内容

WebdriverIO V5 现已支持 CucumberJS

·阅读时长 8 分钟

我们很高兴地宣布,WebdriverIO V5 现在支持 CucumberJS!这对项目提交者来说是一个巨大的挑战,因此我们非常感谢他们为此付出的时间和精力。

通常我们会说

npm install @wdio/cucumber-framework --save-dev

并顺其自然,但这次有所不同。当您升级到最新版本的 Cucumber 框架时,您还需要升级到**最新版本的 WebdriverIO**。在这篇博文中,我们希望为您提供一些关于如何执行此操作的指南。

从哪里开始

升级到最新版本的 Cucumber 框架并不简单,因为如上所述,您还需要迁移到 WebdriverIO 的版本 5。为了理解您需要做什么,我们创建了一些您可能想要遵循的步骤,这将使迁移变得更容易。但在我们解释这些步骤之前,您首先需要了解 WebdriverIO V4 和 WebdriverIO V5 之间的区别。

NodeJS 支持

WebdriverIO 现在需要 NodeJS 8 或更高版本。请注意,NodeJS 8 将在 2019 年底结束其 LTS 支持,因此升级到 10 会更好。如果您想了解更多关于 NodeJS LTS 支持的信息,请查看此处。这可能有助于说服您的同事/DevOps 工程师升级您的 NodeJS 实例。

作为旁注,如果您想知道 NodeJS 默认支持哪些内容,您可以查看node.green 并关注所有即将发生的更改。

W3C 支持

WebdriverIO 现在完全支持 W3C 协议,这有很多优点,但对于您的现有脚本来说,也有一些小缺点。其中一个缺点可能是您正在使用基于 JSONWire 协议的方法,这些方法不受最新的驱动程序(例如 ChromeDriver 74+)的支持。这可能会导致错误,例如browser.positionClick() is not a function。如果您看到此错误,则表示您正在使用 W3C 支持的驱动程序不支持的方法。请参阅 API 文档此处,以查看哪个命令是 WebDriver 协议(W3C)或 JSONWire 协议命令。

只是一个小的旁注,我们试图保持所有browserelement 命令(请参阅上面的链接)与协议无关。这对您来说没有任何变化。为了让您深入了解它是如何工作的,请例如查看keys 命令,您将在此处找到对这两种协议的支持。

如果您想将 W3C 与云供应商(例如 Sauce Labs 或 Browserstack)一起使用,则需要在您的功能中使用供应商特定的前缀。请查看供应商的网站以了解您需要做什么。

但是,您始终需要以优点结尾。因此,使用 W3C,您现在将看到浏览器遵循 Web 自动化的通用 Web 标准。这有助于 WebdriverIO 在其之上构建一个可靠的框架。最后但并非最不重要的一点是,由于所有浏览器供应商都提供了 W3C 支持,我们现在也获得了对 Appium 的更好支持,请查看Apple 的最新文章。因此,W3C 对我们所有人来说都是一个重大进步!

命令更改

多年来,WebdriverIO 为不同的自动化协议添加了越来越多的命令,但没有应用模式,导致出现大量重复和命名不一致的情况。尽管列表看起来很累人,但大多数更改的命令是在内部使用的。请查看V5 的更改日志,以查看所有更改。

重大更改

在创建更好的产品并因此发布主要版本时,您将始终遇到重大更改。我们不能重复太多次,但请查看V5 的更改日志,以查看所有重大更改。

不仅要阅读 V5.0.0 版本中的更改,还要阅读其余的更改!

不仅仅是 WebdriverIO 发生了演变!

当您要使用最新版本的@wdio/cucumber-framework 时,您还将获得最新版本的 Cucumber。**这意味着您还需要查看 CucumberJS 2 和 CucumberJS 5 之间的重大更改。**请查看CucumberJS 的更改日志(从版本 3 到 5),以查看 CucumberJS 中发生了哪些变化。

迁移步骤

关于 V4 和 V5 之间的区别就说这么多,请按照以下步骤操作,使迁移更加顺畅。这些步骤背后的想法是以小的步骤进行迁移。这样做的好处是,您还有时间再次查看您的代码,并可能重构它或删除重复且难看的无用代码。

1. 从一个干净的项目开始

我们建议您创建一个全新的项目,您可以轻松地将其复制到您的旧项目中,并每个场景迁移一个特性文件及其步骤。当您这样做时,您可以轻松地禁用旧项目中的场景,并在新项目中运行新迁移的测试,甚至可以将其嵌入到您的管道中。

在安装依赖项之前,我们需要初始化一个空的 NPM 项目(这将允许我们使用 cli 将所需的依赖项安装到我们的本地项目中)。为此,请运行

mkdir webdriverio-test && cd webdriverio-test
npm init -y

-y 将对所有提示回答“是”,为我们提供一个标准的 NPM 项目。如果您想指定自己的项目详细信息,可以随意省略-y

2. 安装 WebdriverIO CLI

我们建议使用测试运行器,因为它附带了许多使您的生活更轻松的有用功能。使用 WebdriverIO v5 及更高版本,测试运行器已移至@wdio/cli NPM 包中。

现在我们需要安装 cli。通过运行以下命令执行此操作

npm i --save-dev @wdio/cli

3. 生成配置文件

接下来,我们希望生成一个配置文件,该文件存储我们所有 WebdriverIO 设置。为此,只需运行配置实用程序

npx wdio config

一个问题界面弹出。它将有助于轻松快速地创建配置并安装所有必要的依赖项。检查文件并阅读注释,某些内容已更改,因此阅读它们可能有助于您了解配置文件中发生了哪些更改。

**注意:**如果您在cucumberOpts 中使用了编译器,则需要注意 CucumberJS 已删除compiler。这意味着 WebdriverIO 无法为您提供此选项,但是,正如您可能从我们辛勤工作的贡献者那里期望的那样,存在不同的解决方案。请查看BabelTypeScript,了解使用编译器的新方法。

4. 创建相同的文件夹结构

现在一切都已设置好,最好创建您现在在项目中拥有的相同文件夹结构。

不要复制文件,只复制文件夹结构

5. 每个特性文件迁移一个特性文件

在拥有文件夹结构后,将**1 个特性文件**复制到新项目中。从最简单的文件开始,如果文件中有多个场景,请注释掉所有场景并保留 1 个处于活动状态。现在,确保将属于该特定场景的步骤迁移到新项目中,包括属于实现的所有页面对象。请记住,WebdriverIO 在选择元素等方面存在重大更改,请参见上文。如果您使用的是 CucumberJS 中的defineSupportCode,请查看CucumberJS V4 的变更日志。现在已弃用该方法。

对每个场景都执行此操作,逐步迁移,如果遇到问题,请修复并继续。并且不要忘记清理您或同事过去可能造成的代码混乱。

6. 完成后

由于您创建了一个干净的项目,因此您现在可以轻松执行以下操作

  1. 删除旧项目中的所有 WebdriverIO V4 依赖项。
  2. 将新项目中的所有依赖项复制到旧项目中。
  3. 删除所有与测试相关的文件。
  4. 将所有新的与测试相关的文件复制到您的项目中。

然后您就完成了,是时候庆祝了。

支持

如果您需要支持,可以在社区Discord服务器中找到帮助。当您寻求支持时,我们只有一个问题要问您,请提供您问题的详细描述,您已经做了什么等等。否则,您就是在让我们大海捞针,相信我,这对我们来说非常困难。

测试愉快!

此致,

蓝色小子

欢迎!我如何帮助您?

WebdriverIO AI Copilot