2017-03-21 6 views
1

私は分度器とキュウリのフレームワークには新しいです。私は分度器のサイトとここからhttps://semaphoreci.com/community/tutorials/getting-started-with-protractor-and-cucumberの手順に従った。私はキュウリのフレームワークオプション、機能ファイルとステップ定義ファイルで設定された設定ファイルを持っています。しかし、私は私のcucumber-configファイルを実行すると、私のステップ定義を認識せず、常にエラーをスローします。これについての助け?以下は私のセットアップファイルです。分度器設定ファイルがキュウリのステップ定義を取得していません

Protractor folder structure

//cucumber-config.js

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    capabilities: { 
     browserName:'chrome' 
    }, 
    framework: 'custom', 
    frameworkPath: require.resolve('protractor-cucumber-framework'), 
    specs: [ 
    './features/*.feature' 
    ], 
    cucumberOpts: { 
    require: ['./features/step_definitions/*.steps.js'], 
    tags: [], 
    strict: true, 
    format: ["pretty"], 
    dryRun: false, 
    compiler: [] 
    }, 
    onPrepare: function() { 
    browser.manage().window().maximize(); 
    } 
}; 

//testone.feature

#features/test.feature 
Feature: Running Cucumber with Protractor 

    Scenario: Protractor and Cucumber Test 
     Given I go to "https://angularjs.org/" 
     When I add "Be Awesome" in the task field 
     And I click the add button 
     Then I should see my new task in the list 

//testone_steps.js

var chai = require('chai'); 
var chaiAsPromised = require('chai-as-promised'); 

chai.use(chaiAsPromised); 
var expect = chai.expect; 

module.exports = function() { 
    this.Given(/^I go to "([^"]*)"$/, function(site) { 
    browser.get(site); 
    }); 

    this.When(/^I add "([^"]*)" in the task field$/, function(task) { 
    element(by.model('todoList.todoText')).sendKeys(task); 
    }); 

    this.When(/^I click the add button$/, function() { 
    var el = element(by.css('[value="add"]')); 
    el.click(); 
    }); 

    this.Then(/^I should see my new task in the list$/, function(callback) { 
    var todoList = element.all(by.repeater('todo in todoList.todos')); 
    expect(todoList.count()).to.eventually.equal(3); 
    expect(todoList.get(2).getText()).to.eventually.equal('Do not Be Awesome') 
     .and.notify(callback); 
    }); 
}; 

目で現時点で開発中である -は、私は

/opt/protractor_tests 
➔ protractor cucumber.config.js 
(node:3963) DeprecationWarning: os.tmpDir() is deprecated. Use os.tmpdir() instead. 
[21:19:17] I/launcher - Running 1 instances of WebDriver 
[21:19:17] I/hosted - Using the selenium server at http://localhost:4444/wd/hub 
Feature: Running Cucumber with Protractor 

    Scenario: Protractor and Cucumber Test 
    ? Given I go to "https://angularjs.org/" 
    ? When I add "Be Awesome" in the task field 
    ? And I click the add button 
    ? Then I should see my new task in the list 

Warnings: 

1) Scenario: Protractor and Cucumber Test - features/testone.feature:4 
    Step: Given I go to "https://angularjs.org/" - features/testone.feature:5 
    Message: 
    Undefined. Implement with the following snippet: 

     Given('I go to {stringInDoubleQuotes}', function (stringInDoubleQuotes, callback) { 
     // Write code here that turns the phrase above into concrete actions 
     callback(null, 'pending'); 
     }); 

2) Scenario: Protractor and Cucumber Test - features/testone.feature:4 
    Step: When I add "Be Awesome" in the task field - features/testone.feature:6 
    Message: 
    Undefined. Implement with the following snippet: 

     When('I add {stringInDoubleQuotes} in the task field', function (stringInDoubleQuotes, callback) { 
     // Write code here that turns the phrase above into concrete actions 
     callback(null, 'pending'); 
     }); 

3) Scenario: Protractor and Cucumber Test - features/testone.feature:4 
    Step: And I click the add button - features/testone.feature:7 
    Message: 
    Undefined. Implement with the following snippet: 

     When('I click the add button', function (callback) { 
     // Write code here that turns the phrase above into concrete actions 
     callback(null, 'pending'); 
     }); 

4) Scenario: Protractor and Cucumber Test - features/testone.feature:4 
    Step: Then I should see my new task in the list - features/testone.feature:8 
    Message: 
    Undefined. Implement with the following snippet: 

     Then('I should see my new task in the list', function (callback) { 
     // Write code here that turns the phrase above into concrete actions 
     callback(null, 'pending'); 
     }); 

1 scenario (1 undefined) 
4 steps (4 undefined) 
0m00.000s 
[21:19:22] I/launcher - 0 instance(s) of WebDriver still running 
[21:19:22] I/launcher - chrome #01 failed 1 test(s) 
[21:19:22] I/launcher - overall: 1 failed spec(s) 
[21:19:22] E/launcher - Process exited with error code 1 

/opt/protractor_tests 
➔ 

実行エラーで更新

[15:22:59] I/launcher - Running 1 instances of WebDriver 
[15:22:59] I/hosted - Using the selenium server at http://localhost:4444/wd/hub 
Feature: Running Cucumber with Protractor 

    Scenario: Protractor and Cucumber Test 
    √ Given I go to "https://angularjs.org/" 
    √ When I add "Be Awesome" in the task field 
    √ And I click the add button 
    × Then I should see my new task in the list 

Failures: 

1) Scenario: Protractor and Cucumber Test - features\testone.feature:4 
    Step: Then I should see my new task in the list - features\testone.feature:8 
    Step Definition: features\step_definitions\testone.steps.js:22 
    Message: 
    Error: function timed out after 5000 milliseconds 
     at Timeout.<anonymous> (<local>\ProtractorTests\node_modules\cucumber\lib\user_code_runner.js:91:22) 
     at ontimeout (timers.js:365:14) 
     at tryOnTimeout (timers.js:237:5) 
     at Timer.listOnTimeout (timers.js:207:5) 

1 scenario (1 failed) 
4 steps (1 failed, 3 passed) 
0m05.049s 
[15:23:19] I/launcher - 0 instance(s) of WebDriver still running 
[15:23:19] I/launcher - chrome #01 failed 1 test(s) 
[15:23:19] I/launcher - overall: 1 failed spec(s) 
[15:23:19] E/launcher - Process exited with error code 1 
error Command failed with exit code 1. 

答えて

6

...以下のエラーを取得することがCucumberJS 2.0.0+構文を使用しようとしています。 1.3.1以下に

どちらのダウングレードCucumberJS、またはあなたのステップの定義に次の操作を行います。

ありCucumberJS 2.0.0+構文

編集

ある

var chai = require('chai'), 
    expect = chai.expect, 
    chaiAsPromised = require('chai-as-promised'); 
chai.use(chaiAsPromised); 

var {defineSupportCode} = require('cucumber'); 

defineSupportCode(({Given, When, Then}) => { 
    Given(/^I go to "([^"]*)"$/, function(site) { 
    return browser.get(site); 
    }); 

    When(/^I add "([^"]*)" in the task field$/, function(task) { 
    return element(by.model('todoList.todoText')).sendKeys(task); 
    }); 

    When(/^I click the add button$/, function() { 
    var el = element(by.css('[value="add"]')); 
    return el.click(); 
    }); 

    Then(/^I should see my new task in the list$/, function() { 
    var todoList = element.all(by.repeater('todo in todoList.todos')); 
    expect(todoList.count()).to.eventually.equal(3); 
    return expect(todoList.get(2).getText()).to.eventually.equal('Do not Be Awesome'); 
    }); 
}); 

CucumberJS 2.0.0のタイムアウトを設定する2つの方法です

デフォルトのタイムアウト

これは、あなたが持っているすべてのシナリオのデフォルトのタイムアウトを設定することです。この例では

let scenarioTimeout = 200 * 1000, 
    {defineSupportCode} = require('cucumber'); 

defineSupportCode(({setDefaultTimeout}) => { 
    setDefaultTimeout(scenarioTimeout); 
}); 

を、私は200秒にシナリオのタイムアウトを設定しています。あなたはこれが適切であると感じるものに変更することができます。

個々のステップ

これは遅いステップのタイムアウトを設定することです。この例では

When(/^I click the add button$/, {timeout: 60 * 1000}, function() { 
    var el = element(by.css('[value="add"]')); 
    return el.click(); 
    }); 

、タイムアウトが60秒に設定されている、あなたはこれを大きくしたり小さくしたいことがあり、そのステップが何をしているかによって異なります。お使いの設定ファイルで

+0

ユーザは "When"ステートメントでwebdrivers promiseを返す必要がありますか? – cnishina

+0

個人的には、すべてのステップ定義内で最後のステートメントでリターンを使用します。だから私はあなたがすべきだと言います。これにより、実際にはステップが実行されてから、 –

+0

@Kyleありがとうございます。それは動作しますが、私は失敗のステップとして最後のステップを「エラー:5000ミリ秒後にタイムアウトしました」と表示しています。私は完全なエラーメッセージで質問を更新しました。私を助けてください。 – mmar

0

require: ['./features/step_definitions/*.steps.js'], 

しかし、あなたのファイルがある:testone_steps.js、それは次のようになります。testone.steps.js

D'あなたは違いを参照してください?あなたの設定ファイルであなたが使用しているので、_.に変更してください.

関連する問題