【问题标题】:Protractor: cleanup after test suite is finished量角器:测试套件完成后的清理
【发布时间】:2015-06-10 18:03:32
【问题描述】:

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

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

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

量角器中是否有内置方法可以在测试套件完成或只能手动处理时关闭所有窗口/警报框等?

【问题讨论】:

  • 能否请您添加更多有关它们如何失败的详细信息?很高兴看到 Stacktrace。
  • 假设在 abc/spec.js 中打开了一个意外的弹出窗口并且它没有在脚本中处理。因此,如果在 /xyz/spec.js 中它想要单击一个按钮,它无法单击它,因为在之前的规范中打开了未处理的弹出窗口。我想要的是在开始下一个套件之前处理所有这些意外警报的方法。

标签: javascript selenium testing protractor end-to-end


【解决方案1】:

据我了解,protractor 没有地方提供“测试套件之前”或“测试套件之后”的逻辑(如果我错了,请纠正我)。

想法是使用afterEach(),尝试切换到alert,如果存在则dismiss()(或accept(),取决于你的需要),如果不存在则什么都不做:

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

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

另见:

【讨论】:

  • 这是一种方法,但效率不高,因为它会减慢测试套件的速度,因为在每个“it”之后都会进行检查。出于我的目的,我可以在最后一个“it”测试用例之后再添加一个“it”,这样就可以完成这项工作。
  • 我问这个问题的目的是想知道 protractor 是否有内置支持,据我所知,到目前为止 protractor 不支持它。
  • @AmanGupta 很好,好吧,还有一个选项可以让量角器每次使用restartBrowserBetweenTests 设置重新启动浏览器,但这会大大减慢您的测试速度。至于警报,无论如何您都必须手动关闭它们。
【解决方案2】:

这是我编写的处理多个窗口和意外警报的函数。它不会关闭主窗口,因为它在下一个测试套件中是必需的。

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){});
    }; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多