我们可以使用哪些方法来等待加载 angular 站点以便使用量角器对其进行测试?

What are the methods we can use to wait for an angular site to be loaded in order to test it with protractor?

我们可以使用什么方法来等待 Angular 站点加载,以便用量角器对其进行测试,以避免 jasmine : A Jasmine spec timed out. Resetting the WebDriver Control Flow 引起的错误? 我能够登录并转到主页,测试已通过,但从第二次测试开始,我遇到了茉莉花问题。

您可以使用量角器的浏览器对象等待angular。

加载页面后立即添加以下内容:

browser.waitForAngular();

这个错误意味着你的测试花费了太多时间并且超过了default Jasmine spec timeout interval,默认情况下是 30 秒(看起来你已经将超时配置为为 60 秒)。它可以在量角器配置中的 jasmineNodeOpts 对象中进行配置:

jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis},

解决方案通常是特定于用例的,通常表明测试代码中存在错误。为了完全理解发生了什么,我们需要查看代码本身。

在您的特定情况下,对于初学者,您应该尝试将 "ignore synchronization" 和 browser.get() 部分移动到 beforeEach 中。此外,由于您要关闭同步,因此在与元素交互之前,您需要 wait 使该元素出现在页面上:

describe("my app", function () {
    beforeEach(function () {
        browser.ignoreSynchronization = true;
        browser.get("...");
    });

    it("should make the login test", function () { 
        // ...
        var EC = protractor.ExpectedConditions;
        var username = element(by.model("credentials.username"));
        browser.wait(EC.presenceOf(username), 10000);

        username.sendKeys("RET02");
        // ...
    });
});

而且,我不确定您是否真的需要关闭同步,因为这是您正在使用的 AngularJS 页面。

你能等一个url吗? 假设当您单击登录按钮时,您的页面被重定向到另一个 url。所以你可以等待预期的url。示例:

browser.driver.wait(function() {
        return browser.driver.getCurrentUrl().then(function(url) {
            // Dashboard is the loaded url after login (in this example)
            return /Dashboard/.test(url);
        });
    }, 60000);

此代码等待页面 browser.baseUrl/Dashboard 加载 60 秒

我已通过将此功能添加到我的配置文件中来解决此问题:

    onPrepare: function() {
      return browser.getProcessedConfig().then(function(config) {
        var browserName = config.capabilities.browserName;
        browser.manage().timeouts().setScriptTimeout(60000);
      });
    });