/puppa

Functional tests framework based on node.js and google puppeteer

Primary LanguageJavaScriptApache License 2.0Apache-2.0

Stand With Ukraine

Documentation for version: v1.0.45

puppa

Javascript test framework based on node.js and google puppeteer: https://github.com/GoogleChrome/puppeteer

Requirements :

Node with Async/Await Support, check version with latest features here:

https://nodejs.org/

Run two tests on separate tabs:

alt text

Quick start example tests:

git clone https://github.com/stokilo/puppa
cd puppa
npm install
node run.js tests

Integrated with jQuery and jQuery-Expect framework. All test steps are executed sequentially using async/await syntax. Framework supports parallel test execution on multiple browser tabs.

Example, see 'tests' directory for more examples:

testGoogleSearch = async function (config) {
    // enter term 'test', wait max 15 seconds for element, repeat selector search every 200 ms
    await elem("#lst-ib", elem => elem.val('test'), {pooling: 200, timeout: 15000});

    // search
    await elem("#tsf", elem => elem[0].submit());

    // wait for 10 rows with results
    await elem(".r", rows => $expect(rows).to.have.items(10));

    // assert text content on the result list
    await felem(() => elementByContent('span', 'Test - Wikipedia'), wiki => wiki.click());

    // check wikipedia heading text
    await elem(".firstHeading", heading => $expect(heading).to.have.text('Test'));
}

Example test runner configuration that defines parallel test execution on 2 tabs.

{
	"profile": "dev-profile.json",
	"chromeConfig":{
		"flags": "--window-size=1280,720"
	},
	"browserConfig": {
		"viewport": {
			"width": 1280,
			"height": 1024
		},
		"timeout": 60000,
		"headless": false,
		"dumpio": false,
		"devtools": false,
		"closeTab": {
			"onFailure": false,
			"onSuccess": true
		}
	},
	"globalInject": [
		{"file": "tests/google.js", "instrumented": true},
        {"file": "tests/pdf-test.js", "instrumented": true},
        {"file": "tests/expectations/pdf-expect.js", "instrumented": false}
	],
	"testSuite": {

		"suite1": {
			"tab1": [
				"${google.com}.testGoogleSearch",
				"${google.com}.testGoogleSearch"
			],
			"tab2": [
				"${graduateland.com}.testPdfTextContent",
				"${graduateland.com}.testPdfTextContent"
			]
		},

		"suite2": {
			"tab1": [
				"${google.com}.testGoogleSearch"
			],
			"tab2": [
				"${graduateland.com}.testPdfTextContent"
			]
		}
	}
}

You can create your own test suite and use puppa npm module to run them. Run test cases using npm module:

mkdir mytests
cd mytests
npm install puppa

Copy https://github.com/stokilo/puppa/tests/ into mytests/tests Create mytests/run.js

const puppa = require("puppa");
puppa.run(__dirname)

Run all test cases using npm module

node run.js tests

or run test cases grouped in test suite with name 'devSuite'

node run.js tests -s=devSuite

Libraries included: