簡體   English   中英

黃瓜-量角器無法識別步驟定義

[英]Cucumber - Protractor not recognizing steps definitions

我已經用Protractor和Cucumber設置了Angular6項目來運行用戶驗收測試,但是一旦運行測試用例,每個規范都會得到以下錯誤:

未定義。 使用以下代碼段實現:

我已經嘗試了所有可能的黃瓜版本(2,3,4),語法和導入方式的組合-但仍然遇到相同的錯誤或此錯誤:

未處理的拒絕TypeError:this.registerHandler不是函數

我還嘗試過更改量角器,黃瓜,框架版本以及黃瓜版本,但仍然無法正常工作。

我使用普通字符串或正則表達式,回調,異步等都沒關系,步驟定義不會被重新識別。

有什么建議可以使這項工作嗎?

非常感謝你。

下面是我的實際配置:

回購:

https://github.com/stevensgarcia/uat-cucumber

腳手架:

e2e
├── src/
│   ├── features/
│   │   └── home.feature
│   ├── hooks/
│   ├── pages/
│   │   ├── basePage.ts
│   │   ├── courseDetails.ts
│   │   ├── homePage.ts
│   │   └── locator.interface.ts
│   ├── steps/
│   │   └── home.steps.ts
│   └── homePage.e2e-spec.ts
└── tsconfig.e2e.json

黃瓜

exports.config = {
  allScriptsTimeout: 60000,
  useAllAngular2AppRoots: true,
  capabilities: {
    browserName: 'chrome'
  },
  // SELENIUM_PROMISE_MANAGER: false,
  // required feature files
  specs: [
    './e2e/src/features/*.feature'
  ],
  directConnect: true,
  // seleniumAddress: 'http://localhost:4444/wd/hub',
  baseUrl: 'http://localhost:4200/',
  framework: 'custom',
  frameworkPath: require.resolve('protractor-cucumber-framework'),
  onPrepare() {
    require('ts-node').register({
      project: './e2e/tsconfig.e2e.json'
    });
  },

  cucumberOptions: {
    // required step definitions
    compiler: [],
    require : [ './e2e/src/**/*.steps.ts' ],
    strict  : true,
    format  : ['pretty'],
    dryRun  : false,
    tags    : []
  },
  disableChecks: true,
};

家庭功能

Feature: To work with home page

  @smoke
  Scenario: Click course of application
    Given I navigate to application
    When I get all the heading
    When I click the 'Selenium framework development' course
    Then I should see 'Selenium framework development' course in coursedetails page

home.steps.ts

import { defineSupportCode } from 'cucumber';
import { HomePage } from '../pages/homePage';
import { expect } from 'chai';
import { CourseDetailsPage } from '../pages/courseDetails';

defineSupportCode(({Given, When, Then}) => {

  const homePage = new HomePage();
  const coursedetails = new CourseDetailsPage();

  Given(/^I navigate to application$/, async() => {
    await homePage.OpenBrowser('http://localhost:4200');
  });

  When(/^I get all the heading$/, async() => {
    await homePage.GetAllHeadings();
  });

  When(/^I click the '([^\"]*)' course$/, async(headingText) => {
    await homePage.ClickFirstHeading(headingText.toString());
  });

  Then(/^I should see '([^\"]*)' course in coursedetails page$/, async(course) => {
    // tslint:disable-next-line:no-unused-expression
    expect(coursedetails.GetCourseHeading).to.be.not.null;
  });

});

輸出:

>> uatPlayground  (develop *) !3008 $ ./node_modules/.bin/cucumber-js -r ./e2e/src/steps ./e2e/src/features
Feature: To work with home page

  @smoke
  Scenario: Click course of application
  ? Given I navigate to application
  ? When I get all the heading
  ? When I click the 'Selenium framework development' course
  ? Then I should see 'Selenium framework development' course in coursedetails page

Warnings:

1) Scenario: Click course of application - e2e/src/features/home.feature:4
   Step: Given I navigate to application - e2e/src/features/home.feature:5
   Message:
     Undefined. Implement with the following snippet:

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

2) Scenario: Click course of application - e2e/src/features/home.feature:4
   Step: When I get all the heading - e2e/src/features/home.feature:6
   Message:
     Undefined. Implement with the following snippet:

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

3) Scenario: Click course of application - e2e/src/features/home.feature:4
   Step: When I click the 'Selenium framework development' course - e2e/src/features/home.feature:7
   Message:
     Undefined. Implement with the following snippet:

       When('I click the \'Selenium framework development\' course', function (callback) {
         // Write code here that turns the phrase above into concrete actions
         callback(null, 'pending');
       });

4) Scenario: Click course of application - e2e/src/features/home.feature:4
   Step: Then I should see 'Selenium framework development' course in coursedetails page - e2e/src/features/home.feature:8
   Message:
     Undefined. Implement with the following snippet:

       Then('I should see \'Selenium framework development\' course in coursedetails page', 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

1)黃瓜4不支持defineSupportCode ,您應該使用import { Given, Then, When } from "cucumber"; Cucumber import { Given, Then, When } from "cucumber"; home.steps.ts

import { Given, Then, When } from "cucumber";
import { HomePage } from '../pages/homePage';
import { expect } from 'chai';
import { CourseDetailsPage } from '../pages/courseDetails';

const homePage = new HomePage();
const coursedetails = new CourseDetailsPage();

Given(/^I navigate to application$/, async() => {
  await homePage.OpenBrowser('http://localhost:4200');
});

When(/^I get all the heading$/, async() => {
  await homePage.GetAllHeadings();
});

When(/^I click the '([^\"]*)' course$/, async(headingText) => {
  await homePage.ClickFirstHeading(headingText.toString());
});

Then(/^I should see '([^\"]*)' course in coursedetails page$/, async(course) => {
  // tslint:disable-next-line:no-unused-expression
  expect(coursedetails.GetCourseHeading).to.be.not.null;
});

2)在cucumber.conf.ts ,應該是cucumberOpts ,而不是cucumberOptions ,而且格式化程序: pretty自黃瓜4起就被刪除了。

  cucumberOpts: {
    // required step definitions
    compiler: [],
    require : [ 'e2e/src/steps/*.steps.ts' ],
    strict  : true,
    dryRun  : false,
    tags    : []
  },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM