![](/img/trans.png)
[英]Protractor-cucumber : Continue remaining steps execution after assert failed in between instead of skipping the steps,
[英]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.