waitForAngularEnabled如何工作?

fir*_*tor 17 protractor

我很好奇waitForAngularEnabled()是如何工作的?虽然看起来并不复杂,但我无法在任何地方获得满意的答案.所以希望有人帮我清理.

我的目标是检查标准并暂停/锁定运行测试,直到符合条件.例如,这是一些案例.

A.暂停运行测试并等待页面加载

    ...
    let theElement = ...;
    browser.waitForAngularEnabled(false);
    browser.wait(protractor.ExpectedConditions.presenceOf(theElement));
Run Code Online (Sandbox Code Playgroud)

B.使用browser.wait(),与A类似的替代方式

    browser.wait(() => {
        browser.waitForAngularEnabled(false);
        return browser.isElementPresent(by.id('the-element-id'));
    }, timeout); // timeout may not be given
Run Code Online (Sandbox Code Playgroud)

所以问题是:

  1. 调用waitForAngularEnabled(false)后会发生什么?(一旦满足标准或在我的情况下发生超时)
  2. 我应该还原waitForAngularEnabled(true)来继续正常测试吗?
  3. 如果我该做,在哪里放?

希望通过一些背景原理得到明确的答案.

谢谢!

Wil*_*ill 20

1.调用waitForAngularEnabled(false)后会发生什么?(一旦满足标准或在我的情况下发生超时)

根据经验,我发现这似乎导致Protractor仅仅表现为Webdriver.它不等待Angular"安定下来"(没有待处理的HTTP请求或查看更新),这是行为true.相反,如果您使用该false设置,则需要使用ExpectedConditions或类似方法来验证前提条件,以便可靠地执行测试步骤,就像使用普通Webdriver测试一样.

2.我应该还原waitForAngularEnabled(true)继续正常测试吗?

是.但是,我发现在Protractor 5.1.1和5.1.2中,无论是否使用控制流,waitForAngularEnabled在同一执行过程中在整个测试中散布不同的值似乎会产生不可预测的结果; 也就是说,启用状态不遵循其他Protractor/Webdriver调用的相同异步语义.到目前为止,我的结论是你不能在同一个执行中可靠地混合waitForAngularEnabled(false)和waitForAngularEnabled(true).我怀疑这是一个Protractor错误,但我还没有开发出一个简单可靠的测试来证明它支持提交一个Protractor问题.有一个可能相关的问题在这里,现在已经关闭,但不完全确诊.

3.如果我应该这样做,在哪里放?

"之前"你做了Protractor/Webdriver调用,需要恢复等待的Angular语义.但是,如上所述,您可以可靠地保证在true设置环境中真正进行此类呼叫并不清楚.

如果必须使用某些测试false和其他测试,则true可以在单独的执行中运行它们(单独的进程;不要使用相同的命令protractorng e2e命令运行它们).采取这种方法时我没有遇到任何问题.