截取屏幕截图&使用CucumberJs导致场景失败后重新启动浏览器

时间:2016-09-22 18:27:41

标签: javascript node.js selenium-webdriver protractor cucumberjs

我正在尝试用cucumberjs做一个相对简单的场景。即在场景失败后,我想重新启动浏览器,以便它回到下一个场景的初始状态。这是我的尝试

this.After({timeout: 30 * 1000}, function (scenario)
{

    if(scenario.isFailed())
    {

        return browser.takeScreenshot().then(function (buffer)
        {

            console.log("Restarting The Browser As We Got A Failure");

            browser.restart();

            console.log("Finished Restarting The Browser");

            return scenario.attach(new Buffer(buffer, 'base64'), 'image/png');

        });

    }

});

在一个在测试场景结束时运行的cucumberjs钩子中实现。但是,当框架在下一个测试场景中使用浏览器时,它会抛出类似下面的异常

[firefox #01]    Step Definition: StepDefinitions\_Lpewf_Tc_04_steps.js:6
[firefox #01]    Message:
[firefox #01]      UnsupportedOperationError: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.
[firefox #01]          at WebDriverError (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\error.js:26:26)
[firefox #01]          at UnsupportedOperationError (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\error.js:435:26)
[firefox #01]          at checkHasNotQuit (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:378:15)
[firefox #01]          at WebDriver.schedule (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:323:5)
[firefox #01]          at WebDriver.findElements (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver.js:897:22)
[firefox #01]          at C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\built\element.js:141:44
[firefox #01]          at Promise.invokeCallback_ (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1329:14)
[firefox #01]          at TaskQueue.execute_ (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2790:14)
[firefox #01]          at TaskQueue.executeNext_ (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2773:21)
[firefox #01]          at C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2652:27
[firefox #01]      Error
[firefox #01]          at ElementArrayFinder.applyAction_ (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\built\element.js:371:27)
[firefox #01]          at ElementArrayFinder._this.(anonymous function) [as sendKeys] (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\built\element.js:83:30)
[firefox #01]          at ElementFinder._this.(anonymous function) [as sendKeys] (C:\Users\bxb145\WebstormProjects\_System_Test_Project\node_modules\protractor\built\element.js:685:22)
[firefox #01]          at [object Object].EmployerEnterCodeAndLogin (C:\Users\bxb145\WebstormProjects\_System_Test_Project\PageObject\_External_Login_Page.js:181:38)
[firefox #01]          at ModuleLoginPageExternal.EnterEmployeeCodeAndContinue (C:\Users\bxb145\WebstormProjects\_System_Test_Project\ModuleHelper\_Module_External_Login.js:27:40)
[firefox #01]          at World.<anonymous> (C:\Users\bxb145\WebstormProjects\_System_Test_Project\StepDefinitions\_Lpewf_Tc_04_steps.js:22:47)

我想为什么会发生这种情况,我需要做什么,所以我可以在浏览器失败/重启后按常规再次使用浏览器。提前谢谢了。顺便说一下,当JSON转换为HTML报告时,屏幕截图已按正常方式生成。

2 个答案:

答案 0 :(得分:0)

我有相同的代码,但使用回调,也许你可以试试这个:

    this.After(function (scenario, callback) {
        if (scenario.isFailed()) {
            browser.takeScreenshot().then(function (base64png) {
                var decodedImage = new Buffer(base64png, 'base64');
                scenario.attach(decodedImage, 'image/png');
                callback();
            }, function (err) {
                callback(err);
            });
        } else {
            callback();
        }
    });

答案 1 :(得分:0)

我实际上认为它与github上引用的以下问题有关

https://github.com/angular/protractor/issues/2001

使用回调并不能解决这个问题:(

我已经开设了一个新问题来解决这个问题

https://github.com/angular/protractor/issues/3595