2017-10-09 36 views
0

我想从我的量角器测试中的硒控制流中移动appart。将量角器测试移动到异步/等候状态(离开硒控制流程)

这里是我所经历至今的步骤和问题:

1.禁用它通过试验测试

我的第一个想法是使用SELENIUM_PROMISE_MANAGER为了摆脱硒承诺异步/等待代码。

不幸的是,我发现没有办法将一个测试放到SELENIUM_PROMISE_MANAGER=0,同时让其他人到SELENIUM_PROMISE_MANAGER=1以顺利进行迁移。

2.保持它,但使用异步/等待太

所以我想到了一个代码使用异步/等待,同时保持SELENIUM_PROMISE_MANAGER=1

不幸的是,似乎不兼容:https://github.com/angular/protractor/tree/master/exampleTypescript/asyncAwait

没有任何关于硒等方面问题,所以我想知道如果这是一个建议或真实它总是失败

3.覆盖promise.USE_PROMISE_MANAGER

使用protractor.promise.USE_PROMISE_MANAGER=false对我不起作用(在beforeEach)。

4.呼吁异步代码控制流

protractor.promise.controlFlow().execute(/* my async code*/);

对于我来说,似乎混合异步/等待对该控制流...

什么是正确的策略?

我在想,在Protractor测试中移动到async/await的正确策略是什么?

我不想把一切都在异步/等待一个变化,但传播的多个小的变化

+0

阅读[关于弃用问题的完整线索](https://github.com/SeleniumHQ/selenium/issues/2969)似乎非常简单。您需要通过命令行启用异步/等待(选中2月4日)。那么,你为什么认为它不兼容,你会得到什么错误? –

+0

我的问题是,量角器指南明确地说“但是,你不能使用异步/等待和控制流的混合”,我还没有找到任何方法将部分测试移到异步/等待而不是其他人。 – DubZzz

回答

0

不兼容的变化,因为

阅读所有关于this issue here。因为它技术性很强,我(作为相对无技术的人)理解它的方式是:jasminewd2,protractorwebDriver incl。 ControlFlow不适用于处理native promisesmanaged promises的混合。它仅处理managed promises,这些命令由许多jasminewd2命令创建。但是,async/await创建了native promises并将其推送到ControlFlow中,该控件以两种承诺类型的混合形式结束,并最终导致严重的计时问题。它不能被解决,因为ControlFlow正如预期的那样工作并且是为其设计的。async/await的情况从来不是ControlFlow设计的一部分。

关闭ControlFlow我的意思是,managed promises会被忽略。但由于async/await任何managed promise将被包装在native promise内,因此无关紧要,因为您仅通过跟踪native promises来跟踪所有异步任务,因此managed promises会被忽略。

如何来测试,迁移,尚未迁移的测试用例

创建两个单独的conf.js(或任何您的配置文件被命名),并让他们分开。如果您有相同的部分,即helper函数,也会迁移这些函数,并可能会将未迁移的项目也重复。 (创建到.js文件或使用布尔指标来执行或)

@DubZzz发现一个可能的技巧,平稳地移动到async/await。他的诀窍是使用async/awaithelpers转换为protractor.promise.controlFlow().execute。然后通过测试移动测试,最后删除controlFlow执行和标志。

迁移这些链接,我可以提供:

The official introduction and migration guide

A similar question witha well documented answer

A good blog about async/await and promises

The official thread about deprecate promise Manager。它还包含有关如何进行异步/等待工作的有用信息。

+0

非常感谢这个链接,我已经看了一下由硒提供的官方移民指南。尽管如此,我不知道它如何(选项3:迁移到异步/等待)可以应用于量角器。 我还没有找到任何设置promise.USE_PROMISE_MANAGER为false为一些特定的测试只。 – DubZzz

+0

感谢您的评论。我的确误解了这一点。 为什么不直接创建第二个'conf.js'文件,其中列出了您要使用禁用的Promise Manager测试的'specs'?这应该是最简单的。并且您可以跟踪您在配置文件本身内迁移的测试。 –

+0

确实会很棒。问题是这些测试共享一些助手。这些助手依靠硒控制流程。 – DubZzz