量角器:测试套件完成后清理

Protractor: cleanup after test suite is finished

在我的"conf.js"测试套件中安排如下(使用saucelab的webdriver):

suites: {
    abc: './abc/spec.js',
    xyz: './xyz/spec.js',
    pqr: './pqr/spec.js'
},

上述安排的问题是,如果其中一个警报 box/window 意外出现在其中一个测试套件中,则测试套件在该特定套件受到影响并开始失败之后。

当测试套件完成或只能手动处理时,量角器是否有内置方法关闭所有 windows/alert 框等?

据我了解,protractor 中没有地方提供 "before test suite" 或 "after test suite" 逻辑(如果我错了请纠正我)。

想法是使用 afterEach(),根据需要尝试切换到 alert, dismiss() it if exists (or accept()),如果不存在则不执行任何操作:

describe("My test", function () {
    afterEach(function () {
        browser.switchTo().alert().then(
            function (alert) { 
                alert.dismiss(); 
            },
            function (err) {}
        );
    });

    it("Test smth", function () {
        // ...
    });
});

另请参阅:

  • Protractor Dismiss Alerts If Open

这是我编写的处理多个 windows 和意外 alerts.It 的函数,它不会关闭主要 window,因为它在下一个测试套件中是必需的。

this.cleanUp = function(){
        browser.driver.getAllWindowHandles().then(function(handles){
            for(var i=handles.length-1;i>-1;i--){
                browser.switchTo().window(handles[i]);
                browser.switchTo().alert().then(function(alert){
                    alert.dismiss();
                },function(err){});
                if(i)
                    browser.close();
            }
        },function(err){});
    };