diff --git a/.gitignore b/.gitignore index 2029163..98baf2d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules/ lib/ coverage/ test-e2e/report.* +test-e2e/downloads/ .idea/ traces/ video/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 9affbbd..99ad93e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how :pencil: - chore :microscope: - experimental +## [0.54.0] +- :rocket: added _I save file to {string} by clicking {string}_ step + ## [0.53.0] - :rocket: added _I grant {string} permission_ step - :rocket: added _I revoke browser permissions_ step diff --git a/package-lock.json b/package-lock.json index 3f68591..66681b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,23 @@ { "name": "@qavajs/steps-playwright", - "version": "0.53.0", + "version": "0.54.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@qavajs/steps-playwright", - "version": "0.53.0", + "version": "0.54.0", "license": "MIT", "dependencies": { "@playwright/test": "^1.47.0", - "@qavajs/po-playwright": "^0.16.0" + "@qavajs/po-playwright": "^0.16.1" }, "devDependencies": { - "@cucumber/cucumber": "^11.0.0", + "@cucumber/cucumber": "^11.0.1", "@qavajs/cli": "^0.40.0", - "@qavajs/console-formatter": "^0.7.2", + "@qavajs/console-formatter": "^0.8.0", "@qavajs/html-formatter": "^0.18.1", - "@qavajs/memory": "^1.8.0", + "@qavajs/memory": "^1.9.0", "@qavajs/steps-memory": "^0.17.0", "@qavajs/validation": "^0.10.0", "@qavajs/webstorm-adapter": "^8.0.0", @@ -225,11 +225,10 @@ "dev": true }, "node_modules/@cucumber/cucumber": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-11.0.0.tgz", - "integrity": "sha512-5Aswe6UWpoQ6oKrXvEaw0+m7tv9vdwCMDpeY6Pd9i2YfcUuM89R/LC8p1M/d6TAJv7Lv1v0E3+8FB3qj5MBhHQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber/-/cucumber-11.0.1.tgz", + "integrity": "sha512-8ypR+tQiY0sZSzQ5WS+RIKL0rUI38skRuyIK0g/crP/JmDAovG6KNJ6t0YLnGQ43UofG9jR8HWt/EPz2mtZD0w==", "dev": true, - "license": "MIT", "dependencies": { "@cucumber/ci-environment": "10.0.1", "@cucumber/cucumber-expressions": "17.1.0", @@ -1053,17 +1052,32 @@ } }, "node_modules/@qavajs/console-formatter": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/@qavajs/console-formatter/-/console-formatter-0.7.2.tgz", - "integrity": "sha512-KGHWjvYYnZ4j4d/py15MB1qbiA/htKGZp88pCMTUGNXevTx/cuHgO2nCEhnaNKqejkWTRUMWwOiSUCRrOOt51w==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@qavajs/console-formatter/-/console-formatter-0.8.0.tgz", + "integrity": "sha512-pQ0btEmQv/N0wCxPsPdIQ1DdDdKIJbQYWTQz9GV0MZ7Pog+34WhO+iuDnfkf4YhkJyMG/4mZp2wsUKRP/56Hog==", "dev": true, "dependencies": { "chalk": "^4.1.2", "cli-progress": "^3.12.0", - "cli-table3": "^0.6.3", + "cli-table3": "^0.6.5", "figures": "^3.2.0" } }, + "node_modules/@qavajs/console-formatter/node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, "node_modules/@qavajs/html-formatter": { "version": "0.18.1", "resolved": "https://registry.npmjs.org/@qavajs/html-formatter/-/html-formatter-0.18.1.tgz", @@ -1071,17 +1085,15 @@ "dev": true }, "node_modules/@qavajs/memory": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@qavajs/memory/-/memory-1.8.0.tgz", - "integrity": "sha512-zoHzk2RchCLdfc2TiQOQVNpubgQmSo6mz1rE2o7ojUo9/MYfk8m0LHKLUqoGrL3lPtw6WZwH9I1K0raPMPv/lA==", - "dev": true, - "license": "MIT" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@qavajs/memory/-/memory-1.9.0.tgz", + "integrity": "sha512-o4VHLwwGpxvX3r9hvgVhdx30DV6M/uJE0Zi3GScEG0FPuXixrnPAHshsf2fEme5PxETXUT/9tYZogzAv1HAq/Q==", + "dev": true }, "node_modules/@qavajs/po-playwright": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@qavajs/po-playwright/-/po-playwright-0.16.0.tgz", - "integrity": "sha512-fuYd2brk0zCOK5khLanktWNeex5x+77UVdJbmfkAnEbpDhX7ObwiD3EvXxFnsi0VgLSV3YrTfQxVV8ei5MXH1A==", - "license": "MIT" + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@qavajs/po-playwright/-/po-playwright-0.16.1.tgz", + "integrity": "sha512-VhSBw29YETSF8YVVlcgUj2klUaRabY6p1hCOeLx/ppQtgpfAxLSU1gQX020zZbe05yD2cJdMmKpCSQ4DiJs3MA==" }, "node_modules/@qavajs/steps-memory": { "version": "0.17.0", diff --git a/package.json b/package.json index 8afb455..8698ba2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@qavajs/steps-playwright", - "version": "0.53.0", + "version": "0.54.0", "description": "steps to interact with playwright", "main": "./index.js", "scripts": { @@ -26,11 +26,11 @@ }, "homepage": "https://github.com/qavajs/steps-playwright#readme", "devDependencies": { - "@cucumber/cucumber": "^11.0.0", + "@cucumber/cucumber": "^11.0.1", "@qavajs/cli": "^0.40.0", - "@qavajs/console-formatter": "^0.7.2", + "@qavajs/console-formatter": "^0.8.0", "@qavajs/html-formatter": "^0.18.1", - "@qavajs/memory": "^1.8.0", + "@qavajs/memory": "^1.9.0", "@qavajs/webstorm-adapter": "^8.0.0", "@types/chai": "^4.3.17", "@types/express": "^4.17.21", @@ -46,6 +46,6 @@ }, "dependencies": { "@playwright/test": "^1.47.0", - "@qavajs/po-playwright": "^0.16.0" + "@qavajs/po-playwright": "^0.16.1" } } diff --git a/src/actions.ts b/src/actions.ts index 045deb5..0c58061 100644 --- a/src/actions.ts +++ b/src/actions.ts @@ -325,6 +325,21 @@ When('I scroll in {string} until {string} to be visible', async function (scroll } }); +/** + * Save a file to relative path + * @param {string} pathAlias - file path + * @param {string} initiatorAlias - alias of an element triggering downloading process + * @example I save file to './folder/file.pdf' by clicking 'Download Button' + */ +When('I save file to {string} by clicking {string}', async function (pathAlias: string, initiatorAlias: string) { + const downloadPromise = page.waitForEvent('download'); + const element = await getElement(await getValue(initiatorAlias)); + const path = await getValue(pathAlias); + await element.click(); + const download = await downloadPromise; + await download.saveAs(path); +}); + /** * Provide file url to upload input * @param {string} alias - element to upload file diff --git a/test-e2e/apps/actions.html b/test-e2e/apps/actions.html index 1305d75..54b23b5 100644 --- a/test-e2e/apps/actions.html +++ b/test-e2e/apps/actions.html @@ -77,6 +77,7 @@
+Click to download