@thisisagile/easy-puppeteer 18.16.0 → 18.16.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/PuppeteerTester.js
CHANGED
|
@@ -75,7 +75,7 @@ class PuppeteerTester {
|
|
|
75
75
|
return this.by("type", "submit");
|
|
76
76
|
}
|
|
77
77
|
row(contains) {
|
|
78
|
-
return this.byXPath(
|
|
78
|
+
return this.byXPath(`//tr[contains(., '${contains}')]`);
|
|
79
79
|
}
|
|
80
80
|
redirect(url) {
|
|
81
81
|
return this.page.goto(url).then((r) => r?.ok() ?? false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PuppeteerTester.ts"],"sourcesContent":["import { PuppeteerElement } from './PuppeteerElement';\nimport puppeteer, { Browser, ElementHandle, Page } from 'puppeteer';\nimport { ctx, Id, UseCase } from '@thisisagile/easy';\nimport { TestElement, Tester, toUrl } from '@thisisagile/easy-test-web';\n\nexport class PuppeteerTester implements Tester {\n constructor(public host: string, private readonly browser: Browser, private readonly page: Page) {}\n\n get url(): string {\n return this.page.url();\n }\n\n /* istanbul ignore next */\n static launch = (headless = true, launchProps = {}): Promise<Browser> =>\n puppeteer.launch({ headless: headless ? 'shell' : false, args: ['--no-sandbox', '--start-maximized'], ...launchProps });\n\n /* istanbul ignore next */\n static async init(host: string = ctx.env.get('webHost', '') as string, headless = true, width = 1200, height = 800, launchProps = {}): Promise<Tester> {\n const browser = await PuppeteerTester.launch(headless, launchProps);\n const page = await browser.newPage();\n await page.setViewport({ width, height });\n return new PuppeteerTester(host, browser, page);\n }\n\n byClass(c: string): TestElement {\n const h = this.page.waitForSelector(`.${c}`);\n return new PuppeteerElement(h);\n }\n\n byId(id: string): TestElement {\n const h = this.page.waitForSelector(`#${id}`);\n return new PuppeteerElement(h);\n }\n\n byDataTestId(id: string): TestElement {\n return this.by('data-testid', id);\n }\n\n byName(name: string): TestElement {\n return this.by('name', name);\n }\n\n by(key: string, value: string): TestElement {\n const h = this.page.waitForSelector(`[${key}=${value}]`);\n return new PuppeteerElement(h);\n }\n\n submit(): TestElement {\n return this.by('type', 'submit');\n }\n\n row(contains: string): TestElement {\n // Select the first row that contains the given input\n return this.byXPath(
|
|
1
|
+
{"version":3,"sources":["../src/PuppeteerTester.ts"],"sourcesContent":["import { PuppeteerElement } from './PuppeteerElement';\nimport puppeteer, { Browser, ElementHandle, Page } from 'puppeteer';\nimport { ctx, Id, UseCase } from '@thisisagile/easy';\nimport { TestElement, Tester, toUrl } from '@thisisagile/easy-test-web';\n\nexport class PuppeteerTester implements Tester {\n constructor(public host: string, private readonly browser: Browser, private readonly page: Page) {}\n\n get url(): string {\n return this.page.url();\n }\n\n /* istanbul ignore next */\n static launch = (headless = true, launchProps = {}): Promise<Browser> =>\n puppeteer.launch({ headless: headless ? 'shell' : false, args: ['--no-sandbox', '--start-maximized'], ...launchProps });\n\n /* istanbul ignore next */\n static async init(host: string = ctx.env.get('webHost', '') as string, headless = true, width = 1200, height = 800, launchProps = {}): Promise<Tester> {\n const browser = await PuppeteerTester.launch(headless, launchProps);\n const page = await browser.newPage();\n await page.setViewport({ width, height });\n return new PuppeteerTester(host, browser, page);\n }\n\n byClass(c: string): TestElement {\n const h = this.page.waitForSelector(`.${c}`);\n return new PuppeteerElement(h);\n }\n\n byId(id: string): TestElement {\n const h = this.page.waitForSelector(`#${id}`);\n return new PuppeteerElement(h);\n }\n\n byDataTestId(id: string): TestElement {\n return this.by('data-testid', id);\n }\n\n byName(name: string): TestElement {\n return this.by('name', name);\n }\n\n by(key: string, value: string): TestElement {\n const h = this.page.waitForSelector(`[${key}=${value}]`);\n return new PuppeteerElement(h);\n }\n\n submit(): TestElement {\n return this.by('type', 'submit');\n }\n\n row(contains: string): TestElement {\n // Select the first row that contains the given input. byXPath prefixes the query with a dot,\n // so it must stay relative: '(//tr[...])[1]' would become '.(//tr[...])[1]', which is not\n // valid xpath - it matches nothing and only times out. waitForSelector takes the first match.\n return this.byXPath(`//tr[contains(., '${contains}')]`);\n }\n\n redirect(url: string): Promise<boolean> {\n return this.page.goto(url).then(r => r?.ok() ?? false);\n }\n\n goto(to: UseCase, id?: Id): Promise<boolean> {\n return this.redirect(toUrl(to, this.host, id));\n }\n\n wait(): Promise<boolean> {\n return this.page.waitForNavigation().then(r => r?.ok() || false);\n }\n\n close(): Promise<void> {\n return this.browser.close();\n }\n\n private byXPath(q: string): TestElement {\n const h = this.page.waitForSelector(`xpath/.${q}`);\n return new PuppeteerElement(h as Promise<ElementHandle<Element>>);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAiC;AACjC,uBAAwD;AACxD,kBAAiC;AACjC,2BAA2C;AAEpC,MAAM,gBAAkC;AAAA,EAC7C,YAAmB,MAA+B,SAAmC,MAAY;AAA9E;AAA+B;AAAmC;AAAA,EAAa;AAAA,EAElG,IAAI,MAAc;AAChB,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA;AAAA,EAGA,OAAO,SAAS,CAAC,WAAW,MAAM,cAAc,CAAC,MAC/C,iBAAAA,QAAU,OAAO,EAAE,UAAU,WAAW,UAAU,OAAO,MAAM,CAAC,gBAAgB,mBAAmB,GAAG,GAAG,YAAY,CAAC;AAAA;AAAA,EAGxH,aAAa,KAAK,OAAe,gBAAI,IAAI,IAAI,WAAW,EAAE,GAAa,WAAW,MAAM,QAAQ,MAAM,SAAS,KAAK,cAAc,CAAC,GAAoB;AACrJ,UAAM,UAAU,MAAM,gBAAgB,OAAO,UAAU,WAAW;AAClE,UAAM,OAAO,MAAM,QAAQ,QAAQ;AACnC,UAAM,KAAK,YAAY,EAAE,OAAO,OAAO,CAAC;AACxC,WAAO,IAAI,gBAAgB,MAAM,SAAS,IAAI;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAwB;AAC9B,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,CAAC,EAAE;AAC3C,WAAO,IAAI,yCAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,KAAK,IAAyB;AAC5B,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,EAAE,EAAE;AAC5C,WAAO,IAAI,yCAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,aAAa,IAAyB;AACpC,WAAO,KAAK,GAAG,eAAe,EAAE;AAAA,EAClC;AAAA,EAEA,OAAO,MAA2B;AAChC,WAAO,KAAK,GAAG,QAAQ,IAAI;AAAA,EAC7B;AAAA,EAEA,GAAG,KAAa,OAA4B;AAC1C,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,GAAG,IAAI,KAAK,GAAG;AACvD,WAAO,IAAI,yCAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,SAAsB;AACpB,WAAO,KAAK,GAAG,QAAQ,QAAQ;AAAA,EACjC;AAAA,EAEA,IAAI,UAA+B;AAIjC,WAAO,KAAK,QAAQ,qBAAqB,QAAQ,KAAK;AAAA,EACxD;AAAA,EAEA,SAAS,KAA+B;AACtC,WAAO,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,OAAK,GAAG,GAAG,KAAK,KAAK;AAAA,EACvD;AAAA,EAEA,KAAK,IAAa,IAA2B;AAC3C,WAAO,KAAK,aAAS,4BAAM,IAAI,KAAK,MAAM,EAAE,CAAC;AAAA,EAC/C;AAAA,EAEA,OAAyB;AACvB,WAAO,KAAK,KAAK,kBAAkB,EAAE,KAAK,OAAK,GAAG,GAAG,KAAK,KAAK;AAAA,EACjE;AAAA,EAEA,QAAuB;AACrB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC5B;AAAA,EAEQ,QAAQ,GAAwB;AACtC,UAAM,IAAI,KAAK,KAAK,gBAAgB,UAAU,CAAC,EAAE;AACjD,WAAO,IAAI,yCAAiB,CAAoC;AAAA,EAClE;AACF;","names":["puppeteer"]}
|
package/dist/PuppeteerTester.mjs
CHANGED
|
@@ -42,7 +42,7 @@ class PuppeteerTester {
|
|
|
42
42
|
return this.by("type", "submit");
|
|
43
43
|
}
|
|
44
44
|
row(contains) {
|
|
45
|
-
return this.byXPath(
|
|
45
|
+
return this.byXPath(`//tr[contains(., '${contains}')]`);
|
|
46
46
|
}
|
|
47
47
|
redirect(url) {
|
|
48
48
|
return this.page.goto(url).then((r) => r?.ok() ?? false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PuppeteerTester.ts"],"sourcesContent":["import { PuppeteerElement } from './PuppeteerElement';\nimport puppeteer, { Browser, ElementHandle, Page } from 'puppeteer';\nimport { ctx, Id, UseCase } from '@thisisagile/easy';\nimport { TestElement, Tester, toUrl } from '@thisisagile/easy-test-web';\n\nexport class PuppeteerTester implements Tester {\n constructor(public host: string, private readonly browser: Browser, private readonly page: Page) {}\n\n get url(): string {\n return this.page.url();\n }\n\n /* istanbul ignore next */\n static launch = (headless = true, launchProps = {}): Promise<Browser> =>\n puppeteer.launch({ headless: headless ? 'shell' : false, args: ['--no-sandbox', '--start-maximized'], ...launchProps });\n\n /* istanbul ignore next */\n static async init(host: string = ctx.env.get('webHost', '') as string, headless = true, width = 1200, height = 800, launchProps = {}): Promise<Tester> {\n const browser = await PuppeteerTester.launch(headless, launchProps);\n const page = await browser.newPage();\n await page.setViewport({ width, height });\n return new PuppeteerTester(host, browser, page);\n }\n\n byClass(c: string): TestElement {\n const h = this.page.waitForSelector(`.${c}`);\n return new PuppeteerElement(h);\n }\n\n byId(id: string): TestElement {\n const h = this.page.waitForSelector(`#${id}`);\n return new PuppeteerElement(h);\n }\n\n byDataTestId(id: string): TestElement {\n return this.by('data-testid', id);\n }\n\n byName(name: string): TestElement {\n return this.by('name', name);\n }\n\n by(key: string, value: string): TestElement {\n const h = this.page.waitForSelector(`[${key}=${value}]`);\n return new PuppeteerElement(h);\n }\n\n submit(): TestElement {\n return this.by('type', 'submit');\n }\n\n row(contains: string): TestElement {\n // Select the first row that contains the given input\n return this.byXPath(
|
|
1
|
+
{"version":3,"sources":["../src/PuppeteerTester.ts"],"sourcesContent":["import { PuppeteerElement } from './PuppeteerElement';\nimport puppeteer, { Browser, ElementHandle, Page } from 'puppeteer';\nimport { ctx, Id, UseCase } from '@thisisagile/easy';\nimport { TestElement, Tester, toUrl } from '@thisisagile/easy-test-web';\n\nexport class PuppeteerTester implements Tester {\n constructor(public host: string, private readonly browser: Browser, private readonly page: Page) {}\n\n get url(): string {\n return this.page.url();\n }\n\n /* istanbul ignore next */\n static launch = (headless = true, launchProps = {}): Promise<Browser> =>\n puppeteer.launch({ headless: headless ? 'shell' : false, args: ['--no-sandbox', '--start-maximized'], ...launchProps });\n\n /* istanbul ignore next */\n static async init(host: string = ctx.env.get('webHost', '') as string, headless = true, width = 1200, height = 800, launchProps = {}): Promise<Tester> {\n const browser = await PuppeteerTester.launch(headless, launchProps);\n const page = await browser.newPage();\n await page.setViewport({ width, height });\n return new PuppeteerTester(host, browser, page);\n }\n\n byClass(c: string): TestElement {\n const h = this.page.waitForSelector(`.${c}`);\n return new PuppeteerElement(h);\n }\n\n byId(id: string): TestElement {\n const h = this.page.waitForSelector(`#${id}`);\n return new PuppeteerElement(h);\n }\n\n byDataTestId(id: string): TestElement {\n return this.by('data-testid', id);\n }\n\n byName(name: string): TestElement {\n return this.by('name', name);\n }\n\n by(key: string, value: string): TestElement {\n const h = this.page.waitForSelector(`[${key}=${value}]`);\n return new PuppeteerElement(h);\n }\n\n submit(): TestElement {\n return this.by('type', 'submit');\n }\n\n row(contains: string): TestElement {\n // Select the first row that contains the given input. byXPath prefixes the query with a dot,\n // so it must stay relative: '(//tr[...])[1]' would become '.(//tr[...])[1]', which is not\n // valid xpath - it matches nothing and only times out. waitForSelector takes the first match.\n return this.byXPath(`//tr[contains(., '${contains}')]`);\n }\n\n redirect(url: string): Promise<boolean> {\n return this.page.goto(url).then(r => r?.ok() ?? false);\n }\n\n goto(to: UseCase, id?: Id): Promise<boolean> {\n return this.redirect(toUrl(to, this.host, id));\n }\n\n wait(): Promise<boolean> {\n return this.page.waitForNavigation().then(r => r?.ok() || false);\n }\n\n close(): Promise<void> {\n return this.browser.close();\n }\n\n private byXPath(q: string): TestElement {\n const h = this.page.waitForSelector(`xpath/.${q}`);\n return new PuppeteerElement(h as Promise<ElementHandle<Element>>);\n }\n}\n"],"mappings":"AAAA,SAAS,wBAAwB;AACjC,OAAO,eAAiD;AACxD,SAAS,WAAwB;AACjC,SAA8B,aAAa;AAEpC,MAAM,gBAAkC;AAAA,EAC7C,YAAmB,MAA+B,SAAmC,MAAY;AAA9E;AAA+B;AAAmC;AAAA,EAAa;AAAA,EAElG,IAAI,MAAc;AAChB,WAAO,KAAK,KAAK,IAAI;AAAA,EACvB;AAAA;AAAA,EAGA,OAAO,SAAS,CAAC,WAAW,MAAM,cAAc,CAAC,MAC/C,UAAU,OAAO,EAAE,UAAU,WAAW,UAAU,OAAO,MAAM,CAAC,gBAAgB,mBAAmB,GAAG,GAAG,YAAY,CAAC;AAAA;AAAA,EAGxH,aAAa,KAAK,OAAe,IAAI,IAAI,IAAI,WAAW,EAAE,GAAa,WAAW,MAAM,QAAQ,MAAM,SAAS,KAAK,cAAc,CAAC,GAAoB;AACrJ,UAAM,UAAU,MAAM,gBAAgB,OAAO,UAAU,WAAW;AAClE,UAAM,OAAO,MAAM,QAAQ,QAAQ;AACnC,UAAM,KAAK,YAAY,EAAE,OAAO,OAAO,CAAC;AACxC,WAAO,IAAI,gBAAgB,MAAM,SAAS,IAAI;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAwB;AAC9B,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,CAAC,EAAE;AAC3C,WAAO,IAAI,iBAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,KAAK,IAAyB;AAC5B,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,EAAE,EAAE;AAC5C,WAAO,IAAI,iBAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,aAAa,IAAyB;AACpC,WAAO,KAAK,GAAG,eAAe,EAAE;AAAA,EAClC;AAAA,EAEA,OAAO,MAA2B;AAChC,WAAO,KAAK,GAAG,QAAQ,IAAI;AAAA,EAC7B;AAAA,EAEA,GAAG,KAAa,OAA4B;AAC1C,UAAM,IAAI,KAAK,KAAK,gBAAgB,IAAI,GAAG,IAAI,KAAK,GAAG;AACvD,WAAO,IAAI,iBAAiB,CAAC;AAAA,EAC/B;AAAA,EAEA,SAAsB;AACpB,WAAO,KAAK,GAAG,QAAQ,QAAQ;AAAA,EACjC;AAAA,EAEA,IAAI,UAA+B;AAIjC,WAAO,KAAK,QAAQ,qBAAqB,QAAQ,KAAK;AAAA,EACxD;AAAA,EAEA,SAAS,KAA+B;AACtC,WAAO,KAAK,KAAK,KAAK,GAAG,EAAE,KAAK,OAAK,GAAG,GAAG,KAAK,KAAK;AAAA,EACvD;AAAA,EAEA,KAAK,IAAa,IAA2B;AAC3C,WAAO,KAAK,SAAS,MAAM,IAAI,KAAK,MAAM,EAAE,CAAC;AAAA,EAC/C;AAAA,EAEA,OAAyB;AACvB,WAAO,KAAK,KAAK,kBAAkB,EAAE,KAAK,OAAK,GAAG,GAAG,KAAK,KAAK;AAAA,EACjE;AAAA,EAEA,QAAuB;AACrB,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC5B;AAAA,EAEQ,QAAQ,GAAwB;AACtC,UAAM,IAAI,KAAK,KAAK,gBAAgB,UAAU,CAAC,EAAE;AACjD,WAAO,IAAI,iBAAiB,CAAoC;AAAA,EAClE;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thisisagile/easy-puppeteer",
|
|
3
|
-
"version": "18.16.
|
|
3
|
+
"version": "18.16.2",
|
|
4
4
|
"description": "Straightforward wrapper library for Puppeteer web testing framework",
|
|
5
5
|
"author": "Sander Hoogendoorn",
|
|
6
6
|
"license": "MIT",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"@thisisagile/easy-test": "*"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@thisisagile/easy": "^18.16.
|
|
42
|
-
"@thisisagile/easy-test-web": "^18.16.
|
|
41
|
+
"@thisisagile/easy": "^18.16.2",
|
|
42
|
+
"@thisisagile/easy-test-web": "^18.16.2",
|
|
43
43
|
"puppeteer": "^22.2.0"
|
|
44
44
|
}
|
|
45
45
|
}
|
package/src/PuppeteerTester.ts
CHANGED
|
@@ -50,8 +50,10 @@ export class PuppeteerTester implements Tester {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
row(contains: string): TestElement {
|
|
53
|
-
// Select the first row that contains the given input
|
|
54
|
-
|
|
53
|
+
// Select the first row that contains the given input. byXPath prefixes the query with a dot,
|
|
54
|
+
// so it must stay relative: '(//tr[...])[1]' would become '.(//tr[...])[1]', which is not
|
|
55
|
+
// valid xpath - it matches nothing and only times out. waitForSelector takes the first match.
|
|
56
|
+
return this.byXPath(`//tr[contains(., '${contains}')]`);
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
redirect(url: string): Promise<boolean> {
|