4

タスク:

  • Selenium、webdriver、cucumberjs を使用して自動受け入れテストを実行します。
  • 失敗した受け入れテストのシナリオを見つけて、ページのスクリーンショットを撮る
  • これをアーティファクトとして go パイプラインに保存します。

それがその日の私の仕事でした。私は、シナリオ テスト、セレンのセットアップ、パイプラインへの移行、およびその他の必要なすべてを作成して、そのすべてを行いました。

唯一の問題は、失敗したシナリオ ステップを見つけてページのスクリーン ショットを撮る方法を理解する方法が見つからなかったことです。

問題の詳細: ステップ定義に次のコードを配置しました。これは、すべてのシナリオ ステップで実行されます。

//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;

これ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."

問題はコンテキスト データにあります。どういうわけかscenario、最初の引数として after/before メソッドに渡されたものを取得できませんでした。cucumberjs ソースにあるコードを試しましたが、成功しませんでした。stepResultそこで、ステップが完了するたびに実行されるメソッドの追加に移りました。比較的似たアプローチ。

ドキュメントに従って、isFailed()メソッドはステップの結果に基づいてブール値を返します。falseしかし、ステップが失敗したか合格したかに関係なく、私は常に取得します。何isSuccessful()があっても を返す分身を試してみました。true

それで、

  1. ここで何が間違っている可能性がありますか?
  2. 実際にシナリオを after() メソッドに渡すにはどうすればよいですか?

私はTDDに比較的慣れていませんが、これまでのところ素晴らしい経験でした.

4

3 に答える 3

1

詳細は (cucumberjs 1.x) https://github.com/cucumber/cucumber-js/blob/1.x/lib/cucumber/api/scenario.js#L27で取得できます。

getKeyword: function getKeyword() {
    return astScenario.getKeyword();
},
getName: function getName() {
    return astScenario.getName();
},
getDescription: function getDescription() {
    return astScenario.getDescription();
},
getUri: function getUri() {
    return astScenario.getUri();
},
getLine: function getLine() {
    return astScenario.getLine();
},
getTags: function getTags() {
    return astScenario.getTags();
},
isSuccessful: function isSuccessful() {
    return scenarioResult.getStatus() === Cucumber.Status.PASSED;
},
isFailed: function isFailed() {
    return scenarioResult.getStatus() === Cucumber.Status.FAILED;
},
isPending: function isPending() {
    return scenarioResult.getStatus() === Cucumber.Status.PENDING;
},
isUndefined: function isUndefined() {
    return scenarioResult.getStatus() === Cucumber.Status.UNDEFINED;
},
isSkipped: function isSkipped() {
    return scenarioResult.getStatus() === Cucumber.Status.SKIPPED;
},
getException: function getException() {
    return scenarioResult.getFailureException();
},
getAttachments: function getAttachments() {
    return attachments;
},
clearAttachments: function clearAttachments() {
    attachments = [];
},
于 2016-09-19T05:53:59.083 に答える