跳到主要内容

从 Protractor 迁移

本教程面向正在使用 Protractor 并希望将其框架迁移到 WebdriverIO 的用户。这一教程的创建源于 Angular 团队宣布 Protractor 将不再受支持。WebdriverIO 受到了 Protractor 许多设计决策的影响,这也是为什么它可能是最接近迁移的框架。WebdriverIO 团队感谢每一位 Protractor 贡献者的工作,并希望本教程能使向 WebdriverIO 的过渡变得简单直接。

虽然我们希望有一个完全自动化的迁移过程,但现实情况却不同。每个人都有不同的设置,并以不同的方式使用 Protractor。每个步骤都应该被视为指导,而不是一步一步的说明。如果您在迁移过程中遇到问题,请随时联系我们

设置

Protractor 和 WebdriverIO 的 API 实际上非常相似,以至于大多数命令可以通过代码重构工具自动重写。

要安装代码重构工具,请运行:

npm install jscodeshift @wdio/codemod

策略

有很多迁移策略。根据您团队的规模、测试文件数量和迁移的紧急程度,您可以尝试一次性转换所有测试或逐个文件转换。鉴于 Protractor 将继续维护到 Angular 版本 15(2022 年底),您仍有足够的时间。您可以同时运行 Protractor 和 WebdriverIO 测试,并开始用 WebdriverIO 编写新测试。根据您的时间预算,您可以先迁移重要的测试用例,然后逐步处理那些甚至可能删除的测试。

首先是配置文件

安装了代码重构工具后,我们可以开始转换第一个文件。首先查看WebdriverIO 的配置选项。配置文件可能变得非常复杂,仅转换必要部分可能更有意义,看看一旦需要特定选项的测试被迁移后,其余部分如何添加。

对于第一次迁移,我们仅转换配置文件并运行:

npx jscodeshift -t ./node_modules/@wdio/codemod/protractor ./conf.ts
信息

您的配置文件名称可能不同,但原则应该相同:首先迁移配置文件。

安装 WebdriverIO 依赖

下一步是配置一个最小的 WebdriverIO 设置,随着我们从一个框架迁移到另一个框架,我们将开始构建它。首先通过以下命令安装 WebdriverIO CLI:

npm install --save-dev @wdio/cli

接下来运行配置向导:

npx wdio config

这将引导您回答几个问题。对于这个迁移场景,您:

  • 选择默认选择
  • 我们建议不要自动生成示例文件
  • 为 WebdriverIO 文件选择不同的文件夹
  • 选择 Mocha 而非 Jasmine
为什么选择 Mocha?

即使您之前可能使用 Protractor 和 Jasmine,但 Mocha 提供了更好的重试机制。选择权在您手中!

在完成简短的问卷调查后,向导将安装所有必要的包并将它们存储在您的 package.json 中。

迁移配置文件

在我们转换了 conf.ts 并创建了新的 wdio.conf.ts 之后,现在是时候将配置从一个配置迁移到另一个配置了。确保只移植对所有测试运行必不可少的代码。在我们的示例中,我们移植了钩子函数和框架超时。

我们现在将只继续使用 wdio.conf.ts 文件,因此不再需要对原始 Protractor 配置进行任何更改。我们可以恢复这些更改,这样两个框架可以并行运行,我们可以一次移植一个文件。

迁移测试文件

我们现在准备移植第一个测试文件。为了简单起见,让我们先从没有太多第三方包依赖或其他文件(如 PageObjects)的文件开始。在我们的示例中,要迁移的第一个文件是 first-test.spec.ts。首先创建新的 WebdriverIO 配置期望的目录,然后移动文件:

mv mkdir -p ./test/specs/
mv test-suites/first-test.spec.ts ./test/specs

现在让我们转换这个文件:

npx jscodeshift -t ./node_modules/@wdio/codemod/protractor ./test/specs/first-test.spec.ts

就是这样!这个文件非常简单,我们不需要任何额外的更改,可以直接尝试通过以下方式运行 WebdriverIO:

npx wdio run wdio.conf.ts

恭喜 🥳 您刚刚迁移了第一个文件!

下一步

从这一点开始,您继续转换每个测试和页面对象。代码重构工具可能会对某些文件失败,并显示如下错误:

ERR /path/to/project/test/testdata/failing_submit.js Transformation error (Error transforming /test/testdata/failing_submit.js:2)
Error transforming /test/testdata/failing_submit.js:2

> login_form.submit()
^

The command "submit" is not supported in WebdriverIO. We advise to use the click command to click on the submit button instead. For more information on this configuration, see https://webdriver.io/docs/api/element/click.
at /path/to/project/test/testdata/failing_submit.js:132:0

对于某些 Protractor 命令,在 WebdriverIO 中没有替代方案。在这种情况下,代码重构工具会给您一些关于如何重构的建议。如果您经常遇到这样的错误消息,请随时提出问题并要求添加特定的转换。虽然代码重构工具已经转换了大部分 Protractor API,但仍有很大的改进空间。

结论

我们希望本教程能够指导您完成向 WebdriverIO 的迁移过程。社区继续改进代码重构工具,同时在各种组织和各种团队中测试它。如果您有反馈,请不要犹豫,提出问题,或者如果您在迁移过程中遇到困难,请开始讨论

Welcome! How can I help?

WebdriverIO AI Copilot