将 Protractor 测试移至 async/await(保留 selenium 控制流)
Moving Protractor tests to async/await (leaving selenium control flow)
我想在 Protractor 测试中将 appart 从 selenium 控制流中移出。
以下是我到目前为止遇到的步骤和问题:
1.通过 test
测试禁用它
我的第一个想法是使用 SELENIUM_PROMISE_MANAGER
以便从 selenium promises 转移到 async/await 代码。
不幸的是,为了顺利进行迁移,我发现无法将一项测试用于 SELENIUM_PROMISE_MANAGER=0
而将其他测试用于 SELENIUM_PROMISE_MANAGER=1
。
2。保留它但也使用 async/await
所以我想了一个使用async/await同时保持SELENIUM_PROMISE_MANAGER=1
的代码。
可惜好像不兼容:https://github.com/angular/protractor/tree/master/exampleTypescript/asyncAwait
Selenium 方面没有关于此类问题的任何信息,所以我想知道这是建议还是真实的它总是失败。
3。覆盖 promise.USE_PROMISE_MANAGER
使用 protractor.promise.USE_PROMISE_MANAGER=false
对我不起作用(在 beforeEach 中)。
4。在异步代码上调用控制流
protractor.promise.controlFlow().execute(/* my async code*/);
对我来说似乎混合async/await来控制流量...
什么是正确的策略?
我想知道,在 Protractor 测试中移动到 async/await 的正确策略是什么?
我不想在一次更改中把所有内容都放在 async/await 中,而是将更改分散到多个小更改中
不兼容,因为
阅读 this issue here 中的所有内容。
由于它非常技术性,我(作为一个相对非技术性的人)理解它的方式是 jasminewd2
、protractor
和 webDriver
,包括。 ControlFlow
并非旨在处理 native promises
和 managed promises
的混合。它只处理 managed promises
等是由许多 jasminewd2
命令创建的。但是,async/await
创建了 native promises
并将其推送到 ControlFlow 中,它以两种 promises 类型的混合结束,并且最终都出现了严重的时间问题。它无法解决,因为 ControlFlow
按预期和设计目的工作。 async/await
的情况从来不是 ControlFlow
设计的一部分。
关闭 ControlFlow
对我来说意味着 managed promises
会被忽略。但是由于 async/await
任何 managed promise
都会被包裹在 native promise
中,因此没关系,当您跟踪所有异步任务时, managed promises
会被忽略仅跟踪 native promises
。
如何同时测试已迁移和未迁移的测试用例
创建两个单独的 conf.js
(或您的配置文件的任何名称)并将它们分开。如果您有公共部分,即 helper
函数,也请迁移这些部分,并可能将未迁移的部分也保留为副本。 (创建 .js 文件或使用布尔指示器执行或)
@DubZzz 找到了一个可以顺利移动到 async / await
的技巧。他的技巧是用async / await
转换helpers
,然后在protractor.promise.controlFlow().execute
中调用它们。然后逐个测试,最后删除 controlFlow execute 和 flag。
对于迁移,我可以提供这些链接:
The official introduction and migration guide
A good blog about async/await and promises
The official thread about deprecate promise Manager。它还包含有关如何使 async/await 工作的有用信息。
我想在 Protractor 测试中将 appart 从 selenium 控制流中移出。
以下是我到目前为止遇到的步骤和问题:
1.通过 test
测试禁用它我的第一个想法是使用 SELENIUM_PROMISE_MANAGER
以便从 selenium promises 转移到 async/await 代码。
不幸的是,为了顺利进行迁移,我发现无法将一项测试用于 SELENIUM_PROMISE_MANAGER=0
而将其他测试用于 SELENIUM_PROMISE_MANAGER=1
。
2。保留它但也使用 async/await
所以我想了一个使用async/await同时保持SELENIUM_PROMISE_MANAGER=1
的代码。
可惜好像不兼容:https://github.com/angular/protractor/tree/master/exampleTypescript/asyncAwait
Selenium 方面没有关于此类问题的任何信息,所以我想知道这是建议还是真实的它总是失败。
3。覆盖 promise.USE_PROMISE_MANAGER
使用 protractor.promise.USE_PROMISE_MANAGER=false
对我不起作用(在 beforeEach 中)。
4。在异步代码上调用控制流
protractor.promise.controlFlow().execute(/* my async code*/);
对我来说似乎混合async/await来控制流量...
什么是正确的策略?
我想知道,在 Protractor 测试中移动到 async/await 的正确策略是什么?
我不想在一次更改中把所有内容都放在 async/await 中,而是将更改分散到多个小更改中
不兼容,因为
阅读 this issue here 中的所有内容。
由于它非常技术性,我(作为一个相对非技术性的人)理解它的方式是 jasminewd2
、protractor
和 webDriver
,包括。 ControlFlow
并非旨在处理 native promises
和 managed promises
的混合。它只处理 managed promises
等是由许多 jasminewd2
命令创建的。但是,async/await
创建了 native promises
并将其推送到 ControlFlow 中,它以两种 promises 类型的混合结束,并且最终都出现了严重的时间问题。它无法解决,因为 ControlFlow
按预期和设计目的工作。 async/await
的情况从来不是 ControlFlow
设计的一部分。
关闭 ControlFlow
对我来说意味着 managed promises
会被忽略。但是由于 async/await
任何 managed promise
都会被包裹在 native promise
中,因此没关系,当您跟踪所有异步任务时, managed promises
会被忽略仅跟踪 native promises
。
如何同时测试已迁移和未迁移的测试用例
创建两个单独的 conf.js
(或您的配置文件的任何名称)并将它们分开。如果您有公共部分,即 helper
函数,也请迁移这些部分,并可能将未迁移的部分也保留为副本。 (创建 .js 文件或使用布尔指示器执行或)
@DubZzz 找到了一个可以顺利移动到 async / await
的技巧。他的技巧是用async / await
转换helpers
,然后在protractor.promise.controlFlow().execute
中调用它们。然后逐个测试,最后删除 controlFlow execute 和 flag。
对于迁移,我可以提供这些链接:
The official introduction and migration guide
A good blog about async/await and promises
The official thread about deprecate promise Manager。它还包含有关如何使 async/await 工作的有用信息。