npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

generic-cucumber-protractor-framework

v1.8.7

Published

Generic Cucumber Protractor Automation Framework

Downloads

115

Readme

GENERIC CUCUMBER PROTRACTOR FRAMEWORK

alt text

Owner: Lead Automation Engineer for Digital Melbourne (TABCORP) - Cameron Bradley

Folder Structure

Your Project:

./e2e

  • /config
  • /features
    • custom_steps
      • custom_steps.js
    • definitions
      • pages
        • pages.json
        • page_name.json
    • feature.feature

Get up and running:

1.) Install the generic-common-protractor-framework into your project

npm install generic-cucumber-protractorc-framework@latest --save-dev

2.) Ensure your project has the following (required for the protractor_conf.js)

npm install cucumber@latest --save-dev
npm install protractor@latest --save-dev
npm install protractor-cucumber-framework@latest --save-dev

3.) Refer to the protractor_conf_example

Copy and paste the protractor-conf.js into /e2e/config and update accordingly.

The Common Repository:

../../node_modules/generic-cucumber-protractor-framework/step_definitions

  • /definitions
    • elements.js
  • /fake_data
  • /node_modules
  • /step_definitions
    • alert_steps.js
    • env.js
    • fake_data_steps.js
    • form_steps.js
    • general_steps.js
    • hooks.js
    • hotkey_steps.js
    • json_path_steps.js
    • navigation_steps.js
    • rest_steps.js
    • scroll_Steps.js
    • stored_steps.js
    • table_steps.js
  • /support
    • browsers.js
    • fake_data.js
    • form.js
    • general.js
    • helpers.js
    • json_path.js
    • navigation.js
    • page.js
    • pageObjects.js
    • request.js
    • request_payloads.js
    • restConfig.js
    • servers.js
    • step_definitions_manager.js
    • stored_data.js
    • tag_manager.js
    • waitFor.js

Packages installed by the common repository

"JSONPath"
"chai"
"chai-as-promised"
"chai-things"
"cucumber-pretty"
"faker"
"lodash"
"protractor-flake"
"protractor-hotkeys"
"q"
"request"
"request-promise"

Environment Variables

You will need to set the below in CI:

WEB_SERVER - default = localhost WEB_SERVER_PORT - default = 9000 LOCAL_API_ROUTE - default = blank UAT_UI_ROUTE - default = blank PREPROD_UI_ROUTE - default = blank PRODUCTION_UI_ROUTE - default = blank SPECIAL_EXCLUDED_TAGS - default = blank BROWSER - default = chrome (option: firefox) BROWSER_RESOLUTION - default = desktop (option: mobile, tablet or desktop) MOBILE_UI_HEIGHT - default = 375 MOBILE_UI_WIDTH - default = 667 TABLET_UI_HEIGHT - default = 768 TABLET_UI_WIDTH - default = 1024 DESKTOP_UI_HEIGHT - default = 1200 DESKTOP_UI_WIDTH - default = 800 EXTENDED_POLL_WAIT_ON_CLICK - default = 100

Cucumber steps available

FORM STEPS

Single element

Then I fill in the "([^"]*)" input with "([^"]*)"
Then I select the "([^"]*)" as "([^"]*)"
Then the "([^"]*)" input should equal the value "([^"]*)"
When I clear the field "([^"]*)"

Element at Index

When I fill in the "([^"]*)" input with "([^"]*)" within the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" (?:button|link|icon|element)
When I fill in the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" input with "([^"]*)" within the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" (?:button|link|icon|element)

GENERAL STEPS

Click

Single element

When I click the "([^"]*)" (?:button|link) I should be directed to the "([^"]*)" page
When I click the "([^"]*)" with the text "([^"]*)"
When I click the "([^"]*)" by text "([^"]*)" I should be directed to the "([^"]*)" page
When I click the "([^"]*)" (?:button|link|icon|element)
And I hover over the "([^"]*)"
And I refresh the page
And I click the "([^"]*)"
And I mouse over "([^"]*)"
And a new tab is opened with the url containing "([^"]*)"

Element at Index

When I click the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" (?:button|link) I should be directed to the "([^"]*)" page
When I click the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" by text "([^"]*)" I should be directed to the "([^"]*)" page
When I click the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" by text "([^"]*)" I should be directed to the "([^"]*)" page
When I click the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" (?:button|link|icon|element)
When I click the "([^"]*)" (?:button|link|icon|element) within the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)"
When I hover over the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)"
When I click the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" (?:button|link|icon|element|checkbox) within the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)"

Assertions

Single element

Then the "([^"]*)" element should( not)? be displayed
Then the "([^"]*)" element should( not)? be present
Then the "([^"]*)" element within the "([^"]*)" should be present
Then the "([^"]*)" element should( not)? be enable
Then the "([^"]*)" contains the "([^"]*)" attribute "([^"]*)"
Then the "([^"]*)" contains the "([^"]*)" attributes "([^"]*)"
Then the "([^"]*)" contains the "([^"]*)" text "([^"]*)"
Then the "([^"]*)" does not contain the "([^"]*)" text "([^"]*)"
Then the "([^"]*)" does not contain the "([^"]*)" attributes "([^"]*)"
Then the "([^"]*)" does not contain the "([^"]*)" attribute "([^"]*)"
Then the "([^"]*)" containing the text "([^"]*)" has a "([^"]*)" element
Then the "([^"]*)" contains the text "([^"]*)"
Then the "([^"]*)" does not contain the text "([^"]*)"
Then the "([^"]*)" contains the value "([^"]*)"
Then the "([^"]*)" contains no text
Then I can see "(\d*)" "([^"]*)" (?:buttons|links|icons|elements)
Then I can see more than "(\d*)" "([^"]*)" (?:buttons|links|icons|elements)

Element at Index

Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" contains the "([^"]*)" text "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" contains the text "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" does not contain the text "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" element should( not)? be present
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" element should( not)? be displayed
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" contains the "([^"]*)" attribute "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" does not contain the "([^"]*)" attribute "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" does not contain the "([^"]*)" element
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" does not contain the "([^"]*)" text "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" contains the "([^"]*)" element
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" contains "([^"]*)" "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute contains the text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute does not contain the text for "([^"]*)"
Then I see the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" within the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)"

Wait

And I wait "([^"]*)" seconds

SCROLL STEPS

When I scroll down (\d+)$
When I scroll to the bottom of the page
When I scroll to the top of the page
When I scroll down (\d+) within the "([^"]*)"

NAVIGATION STEPS

Given I am on the "([^"]*)" page
Given I am directed to the "([^"]*)" page
Given I set the page to "([^"]*)"
Then I see the "([^"]*)" page title
When I navigate to the "([^"]*)" page
When I navigate directly to the "([^"]*)" page with the stored "([^"]*)"

REST STEPS

When I have a created a "([^"]*)" for "([^"]*)" through the "([^"]*)"
When I retrieve and store the "(.*)" from "([^"]*)" as "([^"]*)"

STORED STEPS

Single element

When I store the number of "([^"]*)" as "([^"]*)"
When I store the "([^"]*)" as "([^"]*)"
When I store the "([^"]*)" number as "([^"]*)"
When I store the "([^"]*)" input value as "([^"]*)"
When I store each "([^"]*)" "([^"]*)" element attribute as "([^"]*)" for the "([^"]*)"
Then the "([^"]*)" should be "([^"]*)" less than the stored number for "([^"]*)"
Then the "([^"]*)" contains the stored "([^"]*)"
Then I see the "([^"]*)" and stored "([^"]*)" page title

Element at Index

When I store the number of "([^"]*)" within the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" as "([^"]*)"     
When I store the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" "([^"]*)" element attribute as "([^"]*)"
When I store the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute as "([^"]*)"
When I store the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute text as "([^"]*)"
When I store the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" as "([^"]*)"
When I store the last "([^"]*)" as "([^"]*)"
When I store the "([^"]*)" "([^"]*)" "([^"]*)" element attribute text as "([^"]*)" within the "([^"]*)" "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" does not contain the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" "([^"]*)" element attribute contains the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" "([^"]*)" element attribute does not contain the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute contains the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute does not contain the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" "([^"]*)" element attribute within the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" does not contain the stored text for "([^"]*)"
Then the "([0-9]+th|[0-9]+st|[0-9]+nd|[0-9]+rd)" "([^"]*)" contains the stored "([^"]*)"
Then the "(1st|2nd|3rd|[0-9]+th)" "([^"]*)" number should be "([^"]*)" less than the stored number for "([^"]*)"

TABLE STEPS

Then the "([^"]*)" table contains the following
Then the "([^"]*)" table does not contain the following

FAKE DATA STEPS

When I fill in the "([^"]*)" input with "([^"]*)" fake data