从同步到异步
由于V8引擎的变化,WebdriverIO团队宣布将在2023年4月弃用同步命令执行。团队一直在努力使这个转变尽可能简单。在本指南中,我们将解释如何逐步将您的测试套件从同步迁移到异步。作为示例项目,我们使用Cucumber Boilerplate,但这种方法同样适用于所有其他项目。
JavaScript中的Promise
WebdriverIO中同步执行之所以流行,是因为它消除了处理promise的复杂性。特别是如果您来自其他不以这种方式存在这个概念的语言,一开始可能会感到困惑。然而,Promise是处理异步代码的强大工具,今天的JavaScript实际上使得处理它变得容易。如果您从未使用过Promise,我们建议查看MDN参考指南,因为在这里详细解释它超出了我们的范围。
异步转换
WebdriverIO测试运行器可以在同一测试套件中处理异步和同步 执行。这意味着您可以按照自己的节奏逐步迁移您的测试和PageObjects。例如,Cucumber Boilerplate定义了一大组步骤定义供您复制到您的项目中。我们可以继续一次迁移一个步骤定义或一个文件。
提示
WebdriverIO提供了一个codemod,它可以几乎完全自动地将您的同步代码转换为异步代码。首先按照文档中描述的方式运行codemod,如果需要,再使用本指南进行手动迁移。
在许多情况下,需要做的只是将调用WebdriverIO命令的函数改为async,并在每个命令前添加await。查看要在样板项目中转换的第一个文件clearInputField.ts,我们将从:
export default (selector: Selector) => {
$(selector).clearValue();
};
转换为:
export default async (selector: Selector) => {
await $(selector).clearValue();
};
就这样。您可以在这里查看包含所有重写示例的完整提交: