@quickpickle/playwright 0.10.6 → 0.11.0
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/PlaywrightWorld.cjs +173 -0
- package/dist/PlaywrightWorld.cjs.map +1 -1
- package/dist/PlaywrightWorld.d.ts +95 -1
- package/dist/PlaywrightWorld.mjs +172 -1
- package/dist/PlaywrightWorld.mjs.map +1 -1
- package/dist/actions.steps.cjs +51 -70
- package/dist/actions.steps.cjs.map +1 -1
- package/dist/actions.steps.d.ts +1 -1
- package/dist/actions.steps.mjs +51 -69
- package/dist/actions.steps.mjs.map +1 -1
- package/dist/outcomes.steps.cjs +73 -135
- package/dist/outcomes.steps.cjs.map +1 -1
- package/dist/outcomes.steps.mjs +73 -135
- package/dist/outcomes.steps.mjs.map +1 -1
- package/dist/snapshotMatcher.cjs +10 -3
- package/dist/snapshotMatcher.cjs.map +1 -1
- package/dist/snapshotMatcher.d.ts +25 -1
- package/dist/snapshotMatcher.mjs +10 -3
- package/dist/snapshotMatcher.mjs.map +1 -1
- package/dist/world.cjs +3 -0
- package/dist/world.cjs.map +1 -1
- package/dist/world.mjs +3 -0
- package/dist/world.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/helpers.cjs +0 -58
- package/dist/helpers.cjs.map +0 -1
- package/dist/helpers.d.ts +0 -7
- package/dist/helpers.mjs +0 -52
- package/dist/helpers.mjs.map +0 -1
package/dist/PlaywrightWorld.cjs
CHANGED
|
@@ -3,7 +3,12 @@
|
|
|
3
3
|
var playwright = require('playwright');
|
|
4
4
|
var quickpickle = require('quickpickle');
|
|
5
5
|
var lodashEs = require('lodash-es');
|
|
6
|
+
var path = require('node:path');
|
|
7
|
+
var url = require('node:url');
|
|
8
|
+
var test = require('playwright/test');
|
|
6
9
|
|
|
10
|
+
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
11
|
+
const projectRoot = path.resolve(path.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('PlaywrightWorld.cjs', document.baseURI).href)))).replace(/node_modules.+/, ''), '..');
|
|
7
12
|
const browsers = { chromium: playwright.chromium, firefox: playwright.firefox, webkit: playwright.webkit };
|
|
8
13
|
const defaultPlaywrightWorldConfig = {
|
|
9
14
|
host: 'http://localhost',
|
|
@@ -23,6 +28,7 @@ const defaultPlaywrightWorldConfig = {
|
|
|
23
28
|
widescreen: '3440x1440',
|
|
24
29
|
},
|
|
25
30
|
defaultBrowserSize: 'desktop',
|
|
31
|
+
stepTimeout: 5000,
|
|
26
32
|
};
|
|
27
33
|
class PlaywrightWorld extends quickpickle.QuickPickleWorld {
|
|
28
34
|
constructor(context, info) {
|
|
@@ -88,6 +94,7 @@ class PlaywrightWorld extends quickpickle.QuickPickleWorld {
|
|
|
88
94
|
});
|
|
89
95
|
}
|
|
90
96
|
async reset(conf) {
|
|
97
|
+
let url = this.page.url() || this.baseUrl.toString();
|
|
91
98
|
await this.page?.close();
|
|
92
99
|
await this.browserContext?.close();
|
|
93
100
|
if (conf) {
|
|
@@ -99,6 +106,7 @@ class PlaywrightWorld extends quickpickle.QuickPickleWorld {
|
|
|
99
106
|
serviceWorkers: 'block'
|
|
100
107
|
});
|
|
101
108
|
this.page = await this.browserContext.newPage();
|
|
109
|
+
await this.page.goto(url, { timeout: this.worldConfig.stepTimeout });
|
|
102
110
|
}
|
|
103
111
|
async close() {
|
|
104
112
|
await this.browser.close();
|
|
@@ -113,6 +121,170 @@ class PlaywrightWorld extends quickpickle.QuickPickleWorld {
|
|
|
113
121
|
console.warn('playwrightConfig is deprecated. Use worldConfig instead.');
|
|
114
122
|
return this.worldConfig;
|
|
115
123
|
}
|
|
124
|
+
get projectRoot() {
|
|
125
|
+
return projectRoot;
|
|
126
|
+
}
|
|
127
|
+
sanitizeFilepath(filepath) {
|
|
128
|
+
return filepath.replace(/\/\/+/g, '/').replace(/\/[\.~]+\//g, '/');
|
|
129
|
+
}
|
|
130
|
+
get screenshotPath() {
|
|
131
|
+
return this.sanitizeFilepath(`${this.worldConfig.screenshotDir}/${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`);
|
|
132
|
+
}
|
|
133
|
+
get fullScreenshotPath() {
|
|
134
|
+
return this.sanitizeFilepath(`${this.projectRoot}/${this.screenshotPath}`);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Gets a locator based on a certain logic
|
|
138
|
+
* @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
|
|
139
|
+
* @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
|
|
140
|
+
* @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
|
|
141
|
+
*
|
|
142
|
+
* @param el The locator or page inside which to get a new locator
|
|
143
|
+
* @param identifier The value, label, placeholder, or css selector, depending on role
|
|
144
|
+
* @param role An ARIA role, "input", or "element"
|
|
145
|
+
* @param text Optional text to match inside the locator
|
|
146
|
+
* @returns Promise<void>
|
|
147
|
+
*/
|
|
148
|
+
getLocator(el, identifier, role, text = null) {
|
|
149
|
+
let locator;
|
|
150
|
+
if (role === 'element')
|
|
151
|
+
locator = el.locator(identifier);
|
|
152
|
+
else if (role === 'input')
|
|
153
|
+
locator = el.getByLabel(identifier).or(el.getByPlaceholder(identifier));
|
|
154
|
+
else
|
|
155
|
+
locator = el.getByRole(role, { name: identifier });
|
|
156
|
+
if (text && role !== 'input')
|
|
157
|
+
return locator.filter({ hasText: text });
|
|
158
|
+
return locator;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Sets a value on a form element based on its type (select, checkbox/radio, or other input)
|
|
162
|
+
* @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
|
|
163
|
+
* @example setValue(locator, "true") => Checks a checkbox/radio button
|
|
164
|
+
* @example setValue(locator, "false") => Unchecks a checkbox/radio button
|
|
165
|
+
* @example setValue(locator, "Some text") => Fills a text input with "Some text"
|
|
166
|
+
*
|
|
167
|
+
* @param locator The Playwright locator for the form element
|
|
168
|
+
* @param value The value to set - can be string or other value type
|
|
169
|
+
* @returns Promise<void>
|
|
170
|
+
*/
|
|
171
|
+
async setValue(locator, value) {
|
|
172
|
+
let { tag, type, role } = await locator.evaluate((el) => ({ tag: el.tagName.toLowerCase(), type: el.getAttribute('type')?.toLowerCase(), role: el.getAttribute('role')?.toLowerCase() }), undefined, { timeout: this.worldConfig.stepTimeout });
|
|
173
|
+
if (!tag)
|
|
174
|
+
throw new Error(`Could not find element with locator: ${locator.toString()}`);
|
|
175
|
+
if (tag === 'select') {
|
|
176
|
+
let values = value.split(/\s*(?<!\\),\s*/).map((v) => v.replace(/\\,/g, ','));
|
|
177
|
+
await locator.selectOption(values, { timeout: this.worldConfig.stepTimeout });
|
|
178
|
+
}
|
|
179
|
+
else if (type === 'checkbox' || type === 'radio' || role === 'checkbox') {
|
|
180
|
+
let check = !(['false', 'no', 'unchecked', '', 'null', 'undefined', '0'].includes(value.toString().toLowerCase()));
|
|
181
|
+
if (check)
|
|
182
|
+
await locator.check({ timeout: this.worldConfig.stepTimeout });
|
|
183
|
+
else
|
|
184
|
+
await locator.uncheck({ timeout: this.worldConfig.stepTimeout });
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
await locator.fill(value, { timeout: this.worldConfig.stepTimeout });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Scrolls the mouse wheel in a specified direction by a given number of pixels
|
|
192
|
+
* @example scroll("down", 100) => Scrolls down 100 pixels
|
|
193
|
+
* @example scroll("up", 50) => Scrolls up 50 pixels
|
|
194
|
+
* @example scroll("left", 200) => Scrolls left 200 pixels
|
|
195
|
+
* @example scroll("right") => Scrolls right using default 100 pixels
|
|
196
|
+
*
|
|
197
|
+
* @param direction The direction to scroll: "up", "down", "left", or "right"
|
|
198
|
+
* @param px The number of pixels to scroll (defaults to 100)
|
|
199
|
+
* @returns Promise<void>
|
|
200
|
+
*/
|
|
201
|
+
async scroll(direction, px = 100) {
|
|
202
|
+
let horiz = direction.includes('t');
|
|
203
|
+
if (horiz)
|
|
204
|
+
await this.page.mouse.wheel(direction === 'right' ? px : -px, 0);
|
|
205
|
+
else
|
|
206
|
+
await this.page.mouse.wheel(0, direction === 'down' ? px : -px);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* A helper function for parsing text on a page or in an element.
|
|
210
|
+
* Can be used to check for the presence OR absence of visible OR hidden text.
|
|
211
|
+
* Examples:
|
|
212
|
+
* @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
|
|
213
|
+
* @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
|
|
214
|
+
* @example assertText(locator, 'text', true, false) // assert that a HIDDEN locator with the text IS FOUND on the page (but there may be visible ones)
|
|
215
|
+
* @example assertText(locator, 'text', false, false) // assert that NO hidden locator with the text is found on the page (but there may be visible ones)
|
|
216
|
+
*
|
|
217
|
+
* @param locator the locator to check
|
|
218
|
+
* @param text the text to be found
|
|
219
|
+
* @param toBePresent whether a locator with the text should be present
|
|
220
|
+
* @param toBeVisible whether the locator with the text should be visible
|
|
221
|
+
* @returns void
|
|
222
|
+
*/
|
|
223
|
+
async expectText(locator, text, toBePresent = true, toBeVisible = true) {
|
|
224
|
+
try {
|
|
225
|
+
await this.expectElement(locator.getByText(text), toBePresent, toBeVisible);
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
throw new Error(`The${toBeVisible ? ' hidden' : ''} text "${text}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* A helper function for parsing elements on a page or in an element.
|
|
233
|
+
* Can be used to check for the presence OR absence of visible OR hidden elements.
|
|
234
|
+
* Examples:
|
|
235
|
+
* @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
|
|
236
|
+
* @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
|
|
237
|
+
* @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
|
|
238
|
+
* @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
|
|
239
|
+
*
|
|
240
|
+
* @param locator the locator to check
|
|
241
|
+
* @param toBePresent whether an element should be present
|
|
242
|
+
* @param toBeVisible whether the element should be visible
|
|
243
|
+
*/
|
|
244
|
+
async expectElement(locator, toBePresent = true, toBeVisible = true) {
|
|
245
|
+
let visibleText = toBeVisible ? 'true' : '';
|
|
246
|
+
try {
|
|
247
|
+
if (toBePresent)
|
|
248
|
+
await test.expect(locator.locator(`visible=${visibleText}`).first()).toBeAttached({ timeout: this.worldConfig.stepTimeout });
|
|
249
|
+
else
|
|
250
|
+
await test.expect(locator.locator(`visible=${visibleText}`)).toHaveCount(0, { timeout: this.worldConfig.stepTimeout });
|
|
251
|
+
}
|
|
252
|
+
catch (e) {
|
|
253
|
+
throw new Error(`The${toBeVisible ? ' hidden' : ''} element "${locator}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* A helper function for getting a metatag from a page.
|
|
258
|
+
* @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
|
|
259
|
+
* @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
|
|
260
|
+
* @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
|
|
261
|
+
* @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
|
|
262
|
+
*
|
|
263
|
+
* @param page The playwright page to check
|
|
264
|
+
* @param name The name of the metatag to check
|
|
265
|
+
* @param expected The expected string to check
|
|
266
|
+
* @param exact Whether the expected string should be an exact match
|
|
267
|
+
* @param expectMatching Whether the expected string should match or NOT match
|
|
268
|
+
*/
|
|
269
|
+
async expectMetatag(page, name, expected, exact, expectMatching = true) {
|
|
270
|
+
let actual;
|
|
271
|
+
if (name === 'title')
|
|
272
|
+
actual = await page.title();
|
|
273
|
+
else
|
|
274
|
+
actual = await (await page.locator(`meta[name="${name}"]`)).getAttribute('content');
|
|
275
|
+
let matches = exact ? actual === expected : actual?.includes(expected);
|
|
276
|
+
if (matches !== expectMatching) {
|
|
277
|
+
let word = exact ? 'exactly match' : 'contain';
|
|
278
|
+
let not = expectMatching ? '' : 'not ';
|
|
279
|
+
throw new Error(`Expected ${name} metatag ${not}to ${word} '${expected}' but got '${actual}'`);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async screenshot(opts) {
|
|
283
|
+
let explodedTags = this.info.explodedIdx ? `_(${this.info.tags.join(',')})` : '';
|
|
284
|
+
let path = opts?.name ? this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}/${opts.name}${explodedTags}.png`) : this.fullScreenshotPath;
|
|
285
|
+
let locator = opts?.locator ?? this.page;
|
|
286
|
+
return await locator.screenshot({ path, ...this.worldConfig.screenshotOpts });
|
|
287
|
+
}
|
|
116
288
|
}
|
|
117
289
|
function getDimensions(size) {
|
|
118
290
|
let [width, height] = size.split('x').map(Number);
|
|
@@ -124,4 +296,5 @@ quickpickle.After(async (world) => {
|
|
|
124
296
|
|
|
125
297
|
exports.PlaywrightWorld = PlaywrightWorld;
|
|
126
298
|
exports.defaultPlaywrightWorldConfig = defaultPlaywrightWorldConfig;
|
|
299
|
+
exports.projectRoot = projectRoot;
|
|
127
300
|
//# sourceMappingURL=PlaywrightWorld.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightWorld.cjs","sources":["../src/PlaywrightWorld.ts"],"sourcesContent":[null],"names":["chromium","firefox","webkit","QuickPickleWorld","defaultsDeep","normalizeTags","After"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlaywrightWorld.cjs","sources":["../src/PlaywrightWorld.ts"],"sourcesContent":[null],"names":["chromium","firefox","webkit","QuickPickleWorld","defaultsDeep","normalizeTags","expect","After"],"mappings":"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"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { type Browser, type BrowserContext, type Page } from 'playwright';
|
|
1
|
+
import { Locator, type Browser, type BrowserContext, type Page } from 'playwright';
|
|
2
2
|
import { QuickPickleWorld } from 'quickpickle';
|
|
3
3
|
import type { TestContext } from 'vitest';
|
|
4
4
|
import { InfoConstructor } from 'quickpickle/dist/world';
|
|
5
|
+
import { ScreenshotSetting } from './snapshotMatcher';
|
|
6
|
+
export declare const projectRoot: string;
|
|
5
7
|
export type PlaywrightWorldConfigSetting = Partial<{
|
|
6
8
|
host: string;
|
|
7
9
|
port: number;
|
|
8
10
|
screenshotDir: string;
|
|
11
|
+
screenshotOptions?: ScreenshotSetting;
|
|
9
12
|
nojsTags: string | string[];
|
|
10
13
|
showBrowserTags: string | string[];
|
|
11
14
|
slowMoTags: string | string[];
|
|
@@ -16,6 +19,7 @@ export type PlaywrightWorldConfigSetting = Partial<{
|
|
|
16
19
|
defaultBrowser: 'chromium' | 'firefox' | 'webkit';
|
|
17
20
|
browserSizes: Record<string, string>;
|
|
18
21
|
defaultBrowserSize: string;
|
|
22
|
+
stepTimeout: number;
|
|
19
23
|
}>;
|
|
20
24
|
export declare const defaultPlaywrightWorldConfig: {
|
|
21
25
|
host: string;
|
|
@@ -35,6 +39,7 @@ export declare const defaultPlaywrightWorldConfig: {
|
|
|
35
39
|
widescreen: string;
|
|
36
40
|
};
|
|
37
41
|
defaultBrowserSize: string;
|
|
42
|
+
stepTimeout: number;
|
|
38
43
|
};
|
|
39
44
|
export type PlaywrightWorldConfig = typeof defaultPlaywrightWorldConfig & {
|
|
40
45
|
port?: number;
|
|
@@ -61,4 +66,93 @@ export declare class PlaywrightWorld extends QuickPickleWorld {
|
|
|
61
66
|
get playwrightConfig(): Partial<{
|
|
62
67
|
[key: string]: any;
|
|
63
68
|
}>;
|
|
69
|
+
get projectRoot(): string;
|
|
70
|
+
sanitizeFilepath(filepath: string): string;
|
|
71
|
+
get screenshotPath(): string;
|
|
72
|
+
get fullScreenshotPath(): string;
|
|
73
|
+
/**
|
|
74
|
+
* Gets a locator based on a certain logic
|
|
75
|
+
* @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
|
|
76
|
+
* @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
|
|
77
|
+
* @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
|
|
78
|
+
*
|
|
79
|
+
* @param el The locator or page inside which to get a new locator
|
|
80
|
+
* @param identifier The value, label, placeholder, or css selector, depending on role
|
|
81
|
+
* @param role An ARIA role, "input", or "element"
|
|
82
|
+
* @param text Optional text to match inside the locator
|
|
83
|
+
* @returns Promise<void>
|
|
84
|
+
*/
|
|
85
|
+
getLocator(el: Locator | Page, identifier: string, role: string | 'element' | 'input', text?: string | null): Locator;
|
|
86
|
+
/**
|
|
87
|
+
* Sets a value on a form element based on its type (select, checkbox/radio, or other input)
|
|
88
|
+
* @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
|
|
89
|
+
* @example setValue(locator, "true") => Checks a checkbox/radio button
|
|
90
|
+
* @example setValue(locator, "false") => Unchecks a checkbox/radio button
|
|
91
|
+
* @example setValue(locator, "Some text") => Fills a text input with "Some text"
|
|
92
|
+
*
|
|
93
|
+
* @param locator The Playwright locator for the form element
|
|
94
|
+
* @param value The value to set - can be string or other value type
|
|
95
|
+
* @returns Promise<void>
|
|
96
|
+
*/
|
|
97
|
+
setValue(locator: Locator, value: string | any): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Scrolls the mouse wheel in a specified direction by a given number of pixels
|
|
100
|
+
* @example scroll("down", 100) => Scrolls down 100 pixels
|
|
101
|
+
* @example scroll("up", 50) => Scrolls up 50 pixels
|
|
102
|
+
* @example scroll("left", 200) => Scrolls left 200 pixels
|
|
103
|
+
* @example scroll("right") => Scrolls right using default 100 pixels
|
|
104
|
+
*
|
|
105
|
+
* @param direction The direction to scroll: "up", "down", "left", or "right"
|
|
106
|
+
* @param px The number of pixels to scroll (defaults to 100)
|
|
107
|
+
* @returns Promise<void>
|
|
108
|
+
*/
|
|
109
|
+
scroll(direction: "up" | "down" | "left" | "right", px?: number): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* A helper function for parsing text on a page or in an element.
|
|
112
|
+
* Can be used to check for the presence OR absence of visible OR hidden text.
|
|
113
|
+
* Examples:
|
|
114
|
+
* @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
|
|
115
|
+
* @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
|
|
116
|
+
* @example assertText(locator, 'text', true, false) // assert that a HIDDEN locator with the text IS FOUND on the page (but there may be visible ones)
|
|
117
|
+
* @example assertText(locator, 'text', false, false) // assert that NO hidden locator with the text is found on the page (but there may be visible ones)
|
|
118
|
+
*
|
|
119
|
+
* @param locator the locator to check
|
|
120
|
+
* @param text the text to be found
|
|
121
|
+
* @param toBePresent whether a locator with the text should be present
|
|
122
|
+
* @param toBeVisible whether the locator with the text should be visible
|
|
123
|
+
* @returns void
|
|
124
|
+
*/
|
|
125
|
+
expectText(locator: Locator | Page, text: string, toBePresent?: boolean, toBeVisible?: boolean): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* A helper function for parsing elements on a page or in an element.
|
|
128
|
+
* Can be used to check for the presence OR absence of visible OR hidden elements.
|
|
129
|
+
* Examples:
|
|
130
|
+
* @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
|
|
131
|
+
* @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
|
|
132
|
+
* @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
|
|
133
|
+
* @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
|
|
134
|
+
*
|
|
135
|
+
* @param locator the locator to check
|
|
136
|
+
* @param toBePresent whether an element should be present
|
|
137
|
+
* @param toBeVisible whether the element should be visible
|
|
138
|
+
*/
|
|
139
|
+
expectElement(locator: Locator | Page, toBePresent?: boolean, toBeVisible?: boolean): Promise<void>;
|
|
140
|
+
/**
|
|
141
|
+
* A helper function for getting a metatag from a page.
|
|
142
|
+
* @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
|
|
143
|
+
* @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
|
|
144
|
+
* @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
|
|
145
|
+
* @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
|
|
146
|
+
*
|
|
147
|
+
* @param page The playwright page to check
|
|
148
|
+
* @param name The name of the metatag to check
|
|
149
|
+
* @param expected The expected string to check
|
|
150
|
+
* @param exact Whether the expected string should be an exact match
|
|
151
|
+
* @param expectMatching Whether the expected string should match or NOT match
|
|
152
|
+
*/
|
|
153
|
+
expectMetatag(page: Page, name: string, expected: string, exact: boolean, expectMatching?: boolean): Promise<void>;
|
|
154
|
+
screenshot(opts?: {
|
|
155
|
+
name?: string;
|
|
156
|
+
locator?: Locator;
|
|
157
|
+
}): Promise<Buffer<ArrayBufferLike>>;
|
|
64
158
|
}
|
package/dist/PlaywrightWorld.mjs
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { chromium, firefox, webkit } from 'playwright';
|
|
2
2
|
import { After, QuickPickleWorld, normalizeTags } from 'quickpickle';
|
|
3
3
|
import { defaultsDeep } from 'lodash-es';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import url from 'node:url';
|
|
6
|
+
import { expect } from 'playwright/test';
|
|
4
7
|
|
|
8
|
+
const projectRoot = path.resolve(path.dirname(url.fileURLToPath(import.meta.url)).replace(/node_modules.+/, ''), '..');
|
|
5
9
|
const browsers = { chromium, firefox, webkit };
|
|
6
10
|
const defaultPlaywrightWorldConfig = {
|
|
7
11
|
host: 'http://localhost',
|
|
@@ -21,6 +25,7 @@ const defaultPlaywrightWorldConfig = {
|
|
|
21
25
|
widescreen: '3440x1440',
|
|
22
26
|
},
|
|
23
27
|
defaultBrowserSize: 'desktop',
|
|
28
|
+
stepTimeout: 5000,
|
|
24
29
|
};
|
|
25
30
|
class PlaywrightWorld extends QuickPickleWorld {
|
|
26
31
|
constructor(context, info) {
|
|
@@ -86,6 +91,7 @@ class PlaywrightWorld extends QuickPickleWorld {
|
|
|
86
91
|
});
|
|
87
92
|
}
|
|
88
93
|
async reset(conf) {
|
|
94
|
+
let url = this.page.url() || this.baseUrl.toString();
|
|
89
95
|
await this.page?.close();
|
|
90
96
|
await this.browserContext?.close();
|
|
91
97
|
if (conf) {
|
|
@@ -97,6 +103,7 @@ class PlaywrightWorld extends QuickPickleWorld {
|
|
|
97
103
|
serviceWorkers: 'block'
|
|
98
104
|
});
|
|
99
105
|
this.page = await this.browserContext.newPage();
|
|
106
|
+
await this.page.goto(url, { timeout: this.worldConfig.stepTimeout });
|
|
100
107
|
}
|
|
101
108
|
async close() {
|
|
102
109
|
await this.browser.close();
|
|
@@ -111,6 +118,170 @@ class PlaywrightWorld extends QuickPickleWorld {
|
|
|
111
118
|
console.warn('playwrightConfig is deprecated. Use worldConfig instead.');
|
|
112
119
|
return this.worldConfig;
|
|
113
120
|
}
|
|
121
|
+
get projectRoot() {
|
|
122
|
+
return projectRoot;
|
|
123
|
+
}
|
|
124
|
+
sanitizeFilepath(filepath) {
|
|
125
|
+
return filepath.replace(/\/\/+/g, '/').replace(/\/[\.~]+\//g, '/');
|
|
126
|
+
}
|
|
127
|
+
get screenshotPath() {
|
|
128
|
+
return this.sanitizeFilepath(`${this.worldConfig.screenshotDir}/${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`);
|
|
129
|
+
}
|
|
130
|
+
get fullScreenshotPath() {
|
|
131
|
+
return this.sanitizeFilepath(`${this.projectRoot}/${this.screenshotPath}`);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Gets a locator based on a certain logic
|
|
135
|
+
* @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
|
|
136
|
+
* @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
|
|
137
|
+
* @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
|
|
138
|
+
*
|
|
139
|
+
* @param el The locator or page inside which to get a new locator
|
|
140
|
+
* @param identifier The value, label, placeholder, or css selector, depending on role
|
|
141
|
+
* @param role An ARIA role, "input", or "element"
|
|
142
|
+
* @param text Optional text to match inside the locator
|
|
143
|
+
* @returns Promise<void>
|
|
144
|
+
*/
|
|
145
|
+
getLocator(el, identifier, role, text = null) {
|
|
146
|
+
let locator;
|
|
147
|
+
if (role === 'element')
|
|
148
|
+
locator = el.locator(identifier);
|
|
149
|
+
else if (role === 'input')
|
|
150
|
+
locator = el.getByLabel(identifier).or(el.getByPlaceholder(identifier));
|
|
151
|
+
else
|
|
152
|
+
locator = el.getByRole(role, { name: identifier });
|
|
153
|
+
if (text && role !== 'input')
|
|
154
|
+
return locator.filter({ hasText: text });
|
|
155
|
+
return locator;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Sets a value on a form element based on its type (select, checkbox/radio, or other input)
|
|
159
|
+
* @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
|
|
160
|
+
* @example setValue(locator, "true") => Checks a checkbox/radio button
|
|
161
|
+
* @example setValue(locator, "false") => Unchecks a checkbox/radio button
|
|
162
|
+
* @example setValue(locator, "Some text") => Fills a text input with "Some text"
|
|
163
|
+
*
|
|
164
|
+
* @param locator The Playwright locator for the form element
|
|
165
|
+
* @param value The value to set - can be string or other value type
|
|
166
|
+
* @returns Promise<void>
|
|
167
|
+
*/
|
|
168
|
+
async setValue(locator, value) {
|
|
169
|
+
let { tag, type, role } = await locator.evaluate((el) => ({ tag: el.tagName.toLowerCase(), type: el.getAttribute('type')?.toLowerCase(), role: el.getAttribute('role')?.toLowerCase() }), undefined, { timeout: this.worldConfig.stepTimeout });
|
|
170
|
+
if (!tag)
|
|
171
|
+
throw new Error(`Could not find element with locator: ${locator.toString()}`);
|
|
172
|
+
if (tag === 'select') {
|
|
173
|
+
let values = value.split(/\s*(?<!\\),\s*/).map((v) => v.replace(/\\,/g, ','));
|
|
174
|
+
await locator.selectOption(values, { timeout: this.worldConfig.stepTimeout });
|
|
175
|
+
}
|
|
176
|
+
else if (type === 'checkbox' || type === 'radio' || role === 'checkbox') {
|
|
177
|
+
let check = !(['false', 'no', 'unchecked', '', 'null', 'undefined', '0'].includes(value.toString().toLowerCase()));
|
|
178
|
+
if (check)
|
|
179
|
+
await locator.check({ timeout: this.worldConfig.stepTimeout });
|
|
180
|
+
else
|
|
181
|
+
await locator.uncheck({ timeout: this.worldConfig.stepTimeout });
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
await locator.fill(value, { timeout: this.worldConfig.stepTimeout });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Scrolls the mouse wheel in a specified direction by a given number of pixels
|
|
189
|
+
* @example scroll("down", 100) => Scrolls down 100 pixels
|
|
190
|
+
* @example scroll("up", 50) => Scrolls up 50 pixels
|
|
191
|
+
* @example scroll("left", 200) => Scrolls left 200 pixels
|
|
192
|
+
* @example scroll("right") => Scrolls right using default 100 pixels
|
|
193
|
+
*
|
|
194
|
+
* @param direction The direction to scroll: "up", "down", "left", or "right"
|
|
195
|
+
* @param px The number of pixels to scroll (defaults to 100)
|
|
196
|
+
* @returns Promise<void>
|
|
197
|
+
*/
|
|
198
|
+
async scroll(direction, px = 100) {
|
|
199
|
+
let horiz = direction.includes('t');
|
|
200
|
+
if (horiz)
|
|
201
|
+
await this.page.mouse.wheel(direction === 'right' ? px : -px, 0);
|
|
202
|
+
else
|
|
203
|
+
await this.page.mouse.wheel(0, direction === 'down' ? px : -px);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* A helper function for parsing text on a page or in an element.
|
|
207
|
+
* Can be used to check for the presence OR absence of visible OR hidden text.
|
|
208
|
+
* Examples:
|
|
209
|
+
* @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
|
|
210
|
+
* @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
|
|
211
|
+
* @example assertText(locator, 'text', true, false) // assert that a HIDDEN locator with the text IS FOUND on the page (but there may be visible ones)
|
|
212
|
+
* @example assertText(locator, 'text', false, false) // assert that NO hidden locator with the text is found on the page (but there may be visible ones)
|
|
213
|
+
*
|
|
214
|
+
* @param locator the locator to check
|
|
215
|
+
* @param text the text to be found
|
|
216
|
+
* @param toBePresent whether a locator with the text should be present
|
|
217
|
+
* @param toBeVisible whether the locator with the text should be visible
|
|
218
|
+
* @returns void
|
|
219
|
+
*/
|
|
220
|
+
async expectText(locator, text, toBePresent = true, toBeVisible = true) {
|
|
221
|
+
try {
|
|
222
|
+
await this.expectElement(locator.getByText(text), toBePresent, toBeVisible);
|
|
223
|
+
}
|
|
224
|
+
catch (e) {
|
|
225
|
+
throw new Error(`The${toBeVisible ? ' hidden' : ''} text "${text}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* A helper function for parsing elements on a page or in an element.
|
|
230
|
+
* Can be used to check for the presence OR absence of visible OR hidden elements.
|
|
231
|
+
* Examples:
|
|
232
|
+
* @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
|
|
233
|
+
* @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
|
|
234
|
+
* @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
|
|
235
|
+
* @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
|
|
236
|
+
*
|
|
237
|
+
* @param locator the locator to check
|
|
238
|
+
* @param toBePresent whether an element should be present
|
|
239
|
+
* @param toBeVisible whether the element should be visible
|
|
240
|
+
*/
|
|
241
|
+
async expectElement(locator, toBePresent = true, toBeVisible = true) {
|
|
242
|
+
let visibleText = toBeVisible ? 'true' : '';
|
|
243
|
+
try {
|
|
244
|
+
if (toBePresent)
|
|
245
|
+
await expect(locator.locator(`visible=${visibleText}`).first()).toBeAttached({ timeout: this.worldConfig.stepTimeout });
|
|
246
|
+
else
|
|
247
|
+
await expect(locator.locator(`visible=${visibleText}`)).toHaveCount(0, { timeout: this.worldConfig.stepTimeout });
|
|
248
|
+
}
|
|
249
|
+
catch (e) {
|
|
250
|
+
throw new Error(`The${toBeVisible ? ' hidden' : ''} element "${locator}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* A helper function for getting a metatag from a page.
|
|
255
|
+
* @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
|
|
256
|
+
* @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
|
|
257
|
+
* @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
|
|
258
|
+
* @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
|
|
259
|
+
*
|
|
260
|
+
* @param page The playwright page to check
|
|
261
|
+
* @param name The name of the metatag to check
|
|
262
|
+
* @param expected The expected string to check
|
|
263
|
+
* @param exact Whether the expected string should be an exact match
|
|
264
|
+
* @param expectMatching Whether the expected string should match or NOT match
|
|
265
|
+
*/
|
|
266
|
+
async expectMetatag(page, name, expected, exact, expectMatching = true) {
|
|
267
|
+
let actual;
|
|
268
|
+
if (name === 'title')
|
|
269
|
+
actual = await page.title();
|
|
270
|
+
else
|
|
271
|
+
actual = await (await page.locator(`meta[name="${name}"]`)).getAttribute('content');
|
|
272
|
+
let matches = exact ? actual === expected : actual?.includes(expected);
|
|
273
|
+
if (matches !== expectMatching) {
|
|
274
|
+
let word = exact ? 'exactly match' : 'contain';
|
|
275
|
+
let not = expectMatching ? '' : 'not ';
|
|
276
|
+
throw new Error(`Expected ${name} metatag ${not}to ${word} '${expected}' but got '${actual}'`);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
async screenshot(opts) {
|
|
280
|
+
let explodedTags = this.info.explodedIdx ? `_(${this.info.tags.join(',')})` : '';
|
|
281
|
+
let path = opts?.name ? this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}/${opts.name}${explodedTags}.png`) : this.fullScreenshotPath;
|
|
282
|
+
let locator = opts?.locator ?? this.page;
|
|
283
|
+
return await locator.screenshot({ path, ...this.worldConfig.screenshotOpts });
|
|
284
|
+
}
|
|
114
285
|
}
|
|
115
286
|
function getDimensions(size) {
|
|
116
287
|
let [width, height] = size.split('x').map(Number);
|
|
@@ -120,5 +291,5 @@ After(async (world) => {
|
|
|
120
291
|
await world.browserContext.close();
|
|
121
292
|
});
|
|
122
293
|
|
|
123
|
-
export { PlaywrightWorld, defaultPlaywrightWorldConfig };
|
|
294
|
+
export { PlaywrightWorld, defaultPlaywrightWorldConfig, projectRoot };
|
|
124
295
|
//# sourceMappingURL=PlaywrightWorld.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightWorld.mjs","sources":["../src/PlaywrightWorld.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlaywrightWorld.mjs","sources":["../src/PlaywrightWorld.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|