我们如何在量角器黄瓜中进行异常处理并进行电子邮件通知

How we do Exception handling in protractor-cucumber and do a email notification

我正在使用带有量角器 5.2.2 和黄瓜 3.2 的 Protractor-Cucumber 框架。我需要在 no.of 个位置发帖。所以我为它写了一个循环脚本。但它在完成循环之前随机失败。因此,当脚本异常结束时,是否有一个异常处理部分在 exiting.The 脚本可能由于网络驱动程序问题、NoSuchElementError、ElementIsNotIntractable、ElementIsNotVisible etc.So 等任何原因而失败之前获得控制权 etc.So 不管是什么这个问题我必须处理,如果它失败了,我必须做一个电子邮件通知。我尝试了 try catch,如下所示,但它对我不起作用。

When(/^I login$/, function () {
  try{
    element(by.css(".signin")).click();
    var count=post_details.length ; 
    for (var i=0; i<count; i++){ 
      post();
     }
   }
  catch(e){
    console.log("failed");
  }
});

我们如何在量角器中做到这一点-cucumber.Thanks提前

异常问题可以试试这个。 ignoreUncaughtException

为电子邮件部分创建一个 hooks.js 文件。在这里您可以设置 After() 函数,以检查您的场景是否失败。 Cucumber Docs.

示例:

After(function (scenario) {
  if (scenario.result.status === Status.FAILED)
  {     
    failed = true;              
    const attach = this.attach;

    //creates a screenshot for the report
    return browser.takeScreenshot().then(function(png) {
        return attach(new Buffer(png, "base64"), "image/png");
    });
  }
});

然后就可以使用nodemailer来发送消息了。 Nodemailer

在您的 AfterAll() 函数中,您可以处理发送部分。

示例:

AfterAll(function(callback){
  console.log("AfterAll");
  if (failed)
  {     
    var transporter = nodemailer.createTransport(
    {
        host: 'host.com',
        port: xx,
        secure: false,
        //proxy: 'http://10.10.10.6:1098',
        auth: {
            user: userMail,
            pass: pw
        }
    });

    var mailOptions = {
        from: 'xx', // sender address (who sends)
        to: xxxxxx@mail.com',
        subject: 'your subject', // Subject line
        text: 'Your test failed....', // plaintext body
        /*attachments: [
        {
            filename: 'report.html',
            path: htmlReport,

        }]*/
    };

    transporter.sendMail(mailOptions, function(error, info)
    {
        if(error)
        {
            return console.log(error);
        } 
        console.log('Email sent: ' + info.response);
        console.log(info);
    });

} else {
    //do your stuff
}
setTimeout(callback, 2000);
});