This package is deprecated and will not be updated anymore as the Angular team announced that Protractor will be sunsetted at the end of 2022 - angular/protractor#5502. Please consider switching to testcafe-cucumber-steps or webdriverio-cucumber-steps
Cucumber steps (step definitions) written with Protractor for end-to-end tests
- 6.x
- 7.x
- 8.x
- 9.x
- 10.x
- 11.x
- 12.x
- 13.x
- 14.x
- 4.x
- 5.x
- 2.x
- 3.x
- 4.x
- 5.x
To install this package and add it to your package.json just run:
npm install protractor-cucumber-steps --save-dev
This package is used as plugin with protractor and protractor-cucumber-framework. It is quite simple to use - to get access to all Cucumber steps defined in this plugin just:
- add the path to protractor-cucumber-steps in
cucumberOpts: {
require: ...
insideprotractor.conf.js
; - add the path to your page object file in
params: {
pageObjects: ...
insideprotractor.conf.js
.
Here is a short config example for protractor.conf.js
:
exports.config = {
// set to "custom" instead of cucumber
framework: 'custom',
// path relative to the current config file
frameworkPath: require.resolve('protractor-cucumber-framework'),
// require feature files
specs: [
'path/to/feature/files/**/*.feature' // accepts a glob
],
cucumberOpts: {
// require step definitions
require: [
'./node_modules/protractor-cucumber-steps/index.js', // path to protractor-cucumber-steps
'path/to/your/step/definitions/**/*.steps.js' // accepts a glob
]
},
// Custom parameters can be specified here
params: {
pageObjects: require('./page_objects/index.js') // path to your page object file
}
};
Also see enhanced example of protractor.conf.js
You can see the example of how to use predefined steps in test.feature
I go to URL "..."
- Open a site (by its URL provided in "" as a string) in the current browser window/tabI go to "..."."..."
- Open a site (by its URL provided in "page"."object") in the current browser window/tabI go to ... from ... page
- Open a site (by its URL provided in object from page) in the current browser window/tabI reload the page
- Reload current pageI click "..."."..."
- Click on any element (provided in "page"."object" as CSS or XPath selector)I click ... from ... page
- Click on any element (provided in object from page as CSS or XPath selector)I wait and click "..."."..."
- Wait for 300 ms and then click on any element (provided in "page"."object" as CSS or XPath selector)I wait and click ... from ... page
- Wait for 300 ms and then click on any element (provided in object from page as CSS or XPath selector)I click "..."."..." if present
- Click on any element (provided in "page"."object" as CSS or XPath selector) only if it is present on the pageI click ... from page ... if present
- Click on any element (provided in object from page as CSS or XPath selector) only if it is present on the pageI double click "..."."..."
- Double click on any element (provided in "page"."object" as CSS or XPath selector)I double click ... from ... page
- Double click on any element (provided in object from page as CSS or XPath selector)I wait for (\d+) ms
- Wait for provided amount of time (in milliseconds). Maximum value is 300000 (equals to 5 minutes)I wait for "..."."..." to be present
- Wait for element (provided in "page"."object" as CSS or XPath selector) to be present on the page (by default waits for 5000 ms, this time can be changed by specifyingparams.customTimeout
insideprotractor.conf.js
- see the example)I wait for ... from ... page to be present
- Wait for element (provided in object from page as CSS or XPath selector) to be present on the page (by default waits for 5000 ms, this time can be changed by specifyingparams.customTimeout
insideprotractor.conf.js
- see the example)I type "..." in "..."."..."
- Type any text (provided in "" as a string) in the input field (provided in "page"."object" as CSS or XPath selector)I type "..." in ... from ... page
- Type any text (provided in "" as a string) in the input field (provided in object from page as CSS or XPath selector)I type "..."."..." in "..."."..."
- Type any text (provided in "page1"."object1") in the input field (provided in "page2"."object2" as CSS or XPath selector)I type ... from ... page in ... from ... page
- Type any text (provided in object1 from page1) in the input field (provided in object2 from page2 as CSS or XPath selector)I move to "..."."..."
- Move the mouse pointer over any element (hover with cursor an element provided in "page"."object" as CSS or XPath selector)I move to ... from ... page
- Move the mouse pointer over any element (hover with cursor an element provided in object from page as CSS or XPath selector)I move to "..."."..." with an offset of x: (\d+)px, y: (\d+)px
- Move the mouse pointer over any element (hover with cursor an element provided in "page"."object" as CSS or XPath selector) with an offset of x: ...px, y: ...pxI move to ... from ... page with an offset of x: (\d+)px, y: (\d+)px
- Move the mouse pointer over any element (hover with cursor an element provided in object from page as CSS or XPath selector) with an offset of x: ...px, y: ...pxI switch to "..."."..." frame
- Switch the context to iframe (provided in "page"."object" as CSS or XPath selector)I switch to ... frame from ... page
- Switch the context to iframe (provided in object from page as CSS or XPath selector)I switch to "..."."..." non angular frame
- Switch the context to non angular iframe (provided in "page"."object" as CSS or XPath selector)I switch to ... non angular frame from ... page
- Switch the context to non angular iframe (provided in object from page as CSS or XPath selector)I switch to default frame
- Switch the context back to default (initial) frameI execute "..."
- Execute script (JavaScript code) provided in "" as a stringI open new tab
- Open new empty tab (via injecting a link with target="_blank" to the current page and clicking it) and switch the context to this new tabI close current tab
- Close current tab and switch the context to the last active tab/windowI switch to first tab
- Switch the context to the first tab/windowI switch to last tab
- Switch the context to the last tab/windowI accept browser alert
- Accept (OK) browser alertI dismiss browser alert
- Dismiss (Cancel) browser alertI authenticate in browser alert with login "..." and password "..."
- Authenticate in browser alert with login and password (provided in "" as strings)
the title should be "..."
- Verify that title of the current browser window/tab equals to the text (provided in "" as a string)"..."."..." should be present
- Verify that element (provided in "page"."object" as CSS or XPath selector) is present on the page... from ... page should be present
- Verify that element (provided in object from page as CSS or XPath selector) is present on the page"..."."..." should not be present
- Verify that element (provided in "page"."object" as CSS or XPath selector) is not present on the page... from ... page should not be present
- Verify that element (provided in object from page as CSS or XPath selector) is not present on the page"..."."..." text should be "..."
- Verify that text of the element (provided in "page"."object" as CSS or XPath selector) equals to the text (provided in "" as a string)... text from ... page should be "..."
- Verify that text of the element (provided in object from page as CSS or XPath selector) equals to the text (provided in "" as a string)"..."."..." text should be "..."."..."
- Verify that text of the element (provided in "page1"."object1" as CSS or XPath selector) equals to the text (provided in "page2"."object2")... text from ... page should be ... from ... page
- Verify that text of the element (provided in object1 from page1 as CSS or XPath selector) equals to the text (provided in object2 from page2)"..."."..." text should contain "..."
- Verify that text of the element (provided in "page"."object" as CSS or XPath selector) contains the text (provided in "" as a string)... text from ... page should contain "..."
- Verify that text of the element (provided in object from page as CSS or XPath selector) contains the text (provided in "" as a string)"..."."..." text should contain "..."."..."
- Verify that text of the element (provided in "page1"."object1" as CSS or XPath selector) contains the text (provided in "page2"."object2")URL should be "..."
- Verify that URL of the current page equals to the text (provided in "" as a string)URL should match /.../
- Verify that URL of the current page matches the regular expression pattern (provided inside // like: /pattern/)URL should contain "..."
- Verify that URL of the current page contains the text (provided in "" as a string)the file "..." is empty
- Verify that the file (with name provided in "" as a string) is empty
You can add comments in .feature
files using #
for single line comments.
Multiline (or block) comments are not supported in Gherkin out of the box (see
cucumber/gherkin#203), so you have to prefix all lines
with #
like this:
# Test single line comment 1
# Test single line comment 2
Scenario: Commit to open source should be joyful
When I commit
Then I get a star
# And a commented out step
You are welcome to contribute to this repository - here is CONTRIBUTING.md to help you get started. It is not mandatory, so you can just create a pull request and we will help you refine it along the way
If this package was helpful for you, please give it a ★ Star on GitHub