diff --git a/CHANGELOG.md b/CHANGELOG.md index d79b6ca..000bf9b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how :pencil: - chore :microscope: - experimental -## [Unreleased] +## [2.4.0] +- :rocket: added capability to pass timeout to function returned by `state` parameter type - :rocket: added js maps ## [2.3.1] diff --git a/package-lock.json b/package-lock.json index 093a27c..67c6f5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,26 @@ { "name": "@qavajs/playwright", - "version": "2.3.1", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@qavajs/playwright", - "version": "2.3.1", + "version": "2.4.0", "license": "MIT", "dependencies": { - "@playwright/test": "^1.49.1" + "@playwright/test": "^1.51.1" }, "devDependencies": { "@cucumber/cucumber": "^11.2.0", "@qavajs/memory": "^1.10.2", - "@qavajs/playwright-runner-adapter": "^1.2.0", + "@qavajs/playwright-runner-adapter": "^1.3.0", "@types/express": "^5.0.0", - "@types/node": "^22.10.6", - "electron": "^34.0.0", + "@types/node": "^22.13.10", + "electron": "^35.0.2", "express": "^4.21.2", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "typescript": "^5.8.2" } }, "node_modules/@babel/code-frame": { @@ -536,12 +536,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.49.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.49.1.tgz", - "integrity": "sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==", + "version": "1.51.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.51.1.tgz", + "integrity": "sha512-nM+kEaTSAoVlXmMPH10017vn3FSiFqr/bh4fKg9vmAdMfd9SDqRZNvPSiAHADc/itWak+qPvMPZQOPwCBW7k7Q==", "license": "Apache-2.0", "dependencies": { - "playwright": "1.49.1" + "playwright": "1.51.1" }, "bin": { "playwright": "cli.js" @@ -558,13 +558,14 @@ "license": "MIT" }, "node_modules/@qavajs/playwright-runner-adapter": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@qavajs/playwright-runner-adapter/-/playwright-runner-adapter-1.2.0.tgz", - "integrity": "sha512-9cW3j/V5/MHsKLqTIzVAKr6tGJFxhiE+sYQSda0oRR6RWNP0gmkhTrvbwOHkUXSexb1aAGW4LdD6mTuS53cTRg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@qavajs/playwright-runner-adapter/-/playwright-runner-adapter-1.3.0.tgz", + "integrity": "sha512-99G7EbvookcMqG2aqUfvt8Hz5h9y4kB3S6Ow16hy/iAPUIEzp/Gp/7M188auTU4KtE5+N3h9XXt6p3pRShqmXw==", "dev": true, "license": "MIT", "dependencies": { "@cucumber/gherkin": "^30.0.4", + "@cucumber/tag-expressions": "^6.1.1", "glob": "^11.0.1" } }, @@ -792,9 +793,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.6.tgz", - "integrity": "sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==", + "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "license": "MIT", "dependencies": { @@ -1410,15 +1411,15 @@ "license": "MIT" }, "node_modules/electron": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-34.0.0.tgz", - "integrity": "sha512-fpaPb0lifoUJ6UJa4Lk8/0B2Ku/xDZWdc1Gkj67jbygTCrvSon0qquju6Ltx1Kz23GRqqlIHXiy9EvrjpY7/Wg==", + "version": "35.0.2", + "resolved": "https://registry.npmjs.org/electron/-/electron-35.0.2.tgz", + "integrity": "sha512-jo8S4GfBpVIBDGitUrv+Vo/I/ZEEs6IvWprG2KJlxayYIKpufulbQaxDt78cC/79FwFo8MA0JOIwx/b9r5NRag==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", + "@types/node": "^22.7.7", "extract-zip": "^2.0.1" }, "bin": { @@ -1428,16 +1429,6 @@ "node": ">= 12.20.55" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.17.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.1.tgz", - "integrity": "sha512-j2VlPv1NnwPJbaCNv69FO/1z4lId0QmGvpT41YxitRtWlg96g/j8qcv2RKsLKe2F6OJgyXhupN1Xo17b2m139Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2711,12 +2702,12 @@ "license": "ISC" }, "node_modules/playwright": { - "version": "1.49.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", - "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", + "version": "1.51.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.1.tgz", + "integrity": "sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.49.1" + "playwright-core": "1.51.1" }, "bin": { "playwright": "cli.js" @@ -2729,9 +2720,9 @@ } }, "node_modules/playwright-core": { - "version": "1.49.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", - "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", + "version": "1.51.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.1.tgz", + "integrity": "sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -3525,9 +3516,9 @@ } }, "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -3538,13 +3529,6 @@ "node": ">=14.17" } }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, "node_modules/unicorn-magic": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", diff --git a/package.json b/package.json index a0e6c80..b4c54e3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@qavajs/playwright", - "version": "2.3.1", + "version": "2.4.0", "description": "steps to interact with playwright", "main": "./index.js", "scripts": { @@ -27,15 +27,15 @@ "devDependencies": { "@cucumber/cucumber": "^11.2.0", "@qavajs/memory": "^1.10.2", - "@qavajs/playwright-runner-adapter": "^1.2.0", + "@qavajs/playwright-runner-adapter": "^1.3.0", "@types/express": "^5.0.0", - "@types/node": "^22.10.6", - "electron": "^34.0.0", + "@types/node": "^22.13.10", + "electron": "^35.0.2", "express": "^4.21.2", "ts-node": "^10.9.2", - "typescript": "^5.7.3" + "typescript": "^5.8.2" }, "dependencies": { - "@playwright/test": "^1.49.1" + "@playwright/test": "^1.51.1" } } diff --git a/src/conditionExpect.ts b/src/conditionExpect.ts index 7b9886e..3270e14 100644 --- a/src/conditionExpect.ts +++ b/src/conditionExpect.ts @@ -20,45 +20,55 @@ export const conditionWaitRegexp = new RegExp(`(${notClause}${toBeClause}${valid function expectLocator(locator: Locator, reverse: boolean) { return reverse ? expect(locator).not : expect(locator); } + const expects = { [conditionValidations.PRESENT]: async ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeAttached(), + reverse: boolean, + options?: { timeout: number }, + ) => expectLocator(locator, reverse).toBeAttached(options), [conditionValidations.VISIBLE]: ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeVisible(), + reverse: boolean, + options?: { timeout: number } + ) => expectLocator(locator, reverse).toBeVisible(options), [conditionValidations.INVISIBLE]: ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeHidden(), + reverse: boolean, + options?: { timeout: number } + ) => expectLocator(locator, reverse).toBeHidden(options), [conditionValidations.IN_VIEWPORT]: ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeInViewport(), + reverse: boolean, + options?: { timeout: number } + ) => expectLocator(locator, reverse).toBeInViewport(options), [conditionValidations.ENABLED]: ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeEnabled(), + reverse: boolean, + options?: { timeout: number } + ) => expectLocator(locator, reverse).toBeEnabled(options), [conditionValidations.DISABLED]: ( locator: Locator, - reverse: boolean - ) => expectLocator(locator, reverse).toBeDisabled() + reverse: boolean, + options?: { timeout: number } + ) => expectLocator(locator, reverse).toBeDisabled(options) } + /** - * Wait for condition + * Wait for locator state * @param {Locator} locator - locator * @param condition + * @param options * @return {Promise} */ export async function conditionExpect( locator: Locator, - condition: string -) { + condition: string, + options?: { timeout: number }, +): Promise { const match = condition.match(conditionWaitExtractRegexp) as RegExpMatchArray; if (!match) throw new Error(`${condition} expect is not implemented`); const [_, reverse, validation] = match; const expectFn = expects[validation]; - await expectFn(locator, Boolean(reverse)); + await expectFn(locator, Boolean(reverse), options); } diff --git a/src/types.ts b/src/types.ts index 0403f7c..c08cb65 100644 --- a/src/types.ts +++ b/src/types.ts @@ -27,4 +27,4 @@ export interface Validation { poll: (AR: any, ER: any) => Promise } -export type StateValidation = (locator: Locator) => Promise; \ No newline at end of file +export type StateValidation = (locator: Locator, options?: { timeout: number }) => Promise; \ No newline at end of file diff --git a/src/validations.ts b/src/validations.ts index 91c4b29..ccb74f5 100644 --- a/src/validations.ts +++ b/src/validations.ts @@ -1,7 +1,6 @@ import { DataTable, Then } from '@cucumber/cucumber'; import { Dialog, Locator } from '@playwright/test'; import { QavajsPlaywrightWorld } from './QavajsPlaywrightWorld'; -import { valueExpect } from './validationExpect'; import { dataTable2Array } from './utils/utils'; import { MemoryValue, StateValidation, Validation } from './types';