如果没有waitForAngularEnabled(false)

时间:2019-03-11 17:30:04

标签: angular protractor e2e-testing

我有一个受测试的网站是使用Angular 4构建的。

除非我指定waitForAngularEnabled(false)ignoreSynchronization = true,否则我的量角器测试将不会进行。

我已与开发人员和技术负责人确认该站点完全为Angular。

Developer表示,即使该网站是使用Angular开发的,也会作为“捆绑包”发送到浏览器。 (我不确定这对开发人员而言意味着什么。)

以下是我的规格文件:

 describe('****** Home Page Tests', function() {
        var frontpage = require("./Front_page.js");

        beforeEach(function() {
            browser.waitForAngularEnabled(true)
            browser.get('mytesturl',50000);
            frontpage.Front_page_link.click()

        })

        it('Should go to **** page', function(){

            frontpage.Journey_button.click()
            browser.getCurrentUrl().then(function(url){
                expect(url).toContain('journey/get-started')
            })
        })

    });

以下是我的配置文件:

    var Jasmine2HtmlReporter = require('protractor-jasmine2-html-reporter');


exports.config = {
    seleniumAddress : 'http://localhost:4444/wd/hub',
    restartBrowserBetweenTests: false,
    //framework: 'jasmine2',

    specs : [ 'spec.js' ],

    onPrepare : function() {

        browser.driver.manage().window().maximize()
        jasmine.getEnv().addReporter(new Jasmine2HtmlReporter({
            savePath : 'target/screenshots'
        }));
    },

    allScriptsTimeout : 50000,


    jasmineNodeOpts : {
        showColors : true,
        defaultTimeoutInterval : 100000,
        isVerbose : true
    }

};

这是我得到的错误:

Failed: script timeout: result was not received in 50 seconds

2 个答案:

答案 0 :(得分:0)

尝试使用https://angular.io/ 通过设置browser.waitForAngularEnabled(true)。 如果工作正常,则说明您已经正确配置了东西。

答案 1 :(得分:0)

对由By.css$$$选择的元素执行的任何操作或任何导致量角器通过调用waitForAngular函数首先等待角度稳定的操作。 “等待角度稳定”是什么意思?

此函数正在等待所有未决的HTTP查询和所有未完成的超时,并且如果找到脚本,则不允许脚本继续进行。

因此,基本上,大多数情况下,大多数时候您只能使用browser.sleep(3000),因为大多数超时发生在动画等中,并且大多数http查询将在3秒后完成。

但是有时超时不会在3秒内完成:例如在长轮询或使用超长超时实现的某些功能的情况下。在我们的应用程序中,我们实现了自动注销功能。登录后,该服务将检查JWT令牌的到期日期,并等待(ExpirationDate-CurrentDate),然后注销用户。可以想象,这是一个巨大的超时,超时36小时!删除它之后,一切都变得像个魅力。

不要那样做,以不同的方式实现这些功能。在您的代码中搜索setTimeoutsetIntervaltimeoutinterval的所有出现并进行处理。