cucumberjs:查找步骤结果是否失败

San*_*eev 4 selenium mocha.js node.js selenium-webdriver cucumberjs

任务:

  • 使用selenium,webdriver,cucumberjs执行自动验收测试.
  • 找到失败的验收测试场景并获取页面的屏幕截图
  • 将其保存为go管道中的人工制品.

这是我今天的任务.我已经完成了所有这些,包括编写场景测试,selenium设置,go pipelines以及其他所需的一切.

唯一的问题是 - 我无法弄清楚如何找到失败的场景步骤并拍摄页面的屏幕截图.

问题详细信息:我在步骤定义中放置了以下代码,该步骤适用于每个方案步骤

//file: features/setpdefinitions/common.step.js

var commonWrapper = function commonWrapper() {

    this.World = require('../support/world').World;

    this.Before(function (next) {
        this.initBrowser(next);
    });

    this.After(function (next) {
        this.browser.quit(next);
    });

    this.StepResult(function (event, callback) {
        var stepResult = event.getPayloadItem('stepResult');
        console.log(stepResult.isFailed());
        callback();
    });
};

module.exports = commonWrapper;
Run Code Online (Sandbox Code Playgroud)

World包含了浏览器的启动方法.

并且,这是我正在测试的示例功能方案

Feature: Forgot Password
     As a user of Booking My account
     I want to reset my password
     So that I can login to my account when I forget my password

 Scenario: On unsuccessful entering invalid email id
    Given I am on forgot password page
    When I enter invalid email "invalidemail-someDomain.com"
        And click submit button
    Then I should see validation message "Please enter a valid email."
Run Code Online (Sandbox Code Playgroud)

问题在于上下文数据.我以某种方式无法将scenario传递给after/before方法作为第一个参数.我尝试了在cucumberjs源代码中给出的代码但是没有成功.所以,我开始添加stepResult方法,每次完成一个步骤时都会运行.一种相对类似的方法.

根据文档,该isFailed()方法根据步骤结果返回一个布尔值.但是,false无论步骤失败还是通过,我总是得到一个.我尝试了它的alter-ego isSuccessful(),true无论如何都会返回.

所以,

  1. 我在这里可能做错了什么?
  2. 我如何实际将场景传递给after()方法?

我对TDD比较陌生,但到目前为止,这是一次很棒的体验.

Dom*_*erg 7

你需要的是一个钩子

创建文件features/support/after_hooks.js

module.exports = function() {
    this.After(function (scenario, callback) {
        if (scenario.isFailed()) {
            // Do your after stuff here
        }
        callback();
    });
};
Run Code Online (Sandbox Code Playgroud)

请注意,这仅在每个功能之后执行