@quickpickle/playwright 0.10.6 → 0.11.1

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.
@@ -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,179 @@ 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 screenshotDir() {
131
+ return this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}`);
132
+ }
133
+ get screenshotPath() {
134
+ return this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}/${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`);
135
+ }
136
+ get screenshotFilename() {
137
+ return `${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`;
138
+ }
139
+ /**
140
+ * @deprecated Use `screenshotPath` instead
141
+ */
142
+ get fullScreenshotPath() {
143
+ return this.screenshotPath;
144
+ }
145
+ /**
146
+ * Gets a locator based on a certain logic
147
+ * @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
148
+ * @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
149
+ * @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
150
+ *
151
+ * @param el The locator or page inside which to get a new locator
152
+ * @param identifier The value, label, placeholder, or css selector, depending on role
153
+ * @param role An ARIA role, "input", or "element"
154
+ * @param text Optional text to match inside the locator
155
+ * @returns Promise<void>
156
+ */
157
+ getLocator(el, identifier, role, text = null) {
158
+ let locator;
159
+ if (role === 'element')
160
+ locator = el.locator(identifier);
161
+ else if (role === 'input')
162
+ locator = el.getByLabel(identifier).or(el.getByPlaceholder(identifier));
163
+ else
164
+ locator = el.getByRole(role, { name: identifier });
165
+ if (text && role !== 'input')
166
+ return locator.filter({ hasText: text });
167
+ return locator;
168
+ }
169
+ /**
170
+ * Sets a value on a form element based on its type (select, checkbox/radio, or other input)
171
+ * @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
172
+ * @example setValue(locator, "true") => Checks a checkbox/radio button
173
+ * @example setValue(locator, "false") => Unchecks a checkbox/radio button
174
+ * @example setValue(locator, "Some text") => Fills a text input with "Some text"
175
+ *
176
+ * @param locator The Playwright locator for the form element
177
+ * @param value The value to set - can be string or other value type
178
+ * @returns Promise<void>
179
+ */
180
+ async setValue(locator, value) {
181
+ 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 });
182
+ if (!tag)
183
+ throw new Error(`Could not find element with locator: ${locator.toString()}`);
184
+ if (tag === 'select') {
185
+ let values = value.split(/\s*(?<!\\),\s*/).map((v) => v.replace(/\\,/g, ','));
186
+ await locator.selectOption(values, { timeout: this.worldConfig.stepTimeout });
187
+ }
188
+ else if (type === 'checkbox' || type === 'radio' || role === 'checkbox') {
189
+ let check = !(['false', 'no', 'unchecked', '', 'null', 'undefined', '0'].includes(value.toString().toLowerCase()));
190
+ if (check)
191
+ await locator.check({ timeout: this.worldConfig.stepTimeout });
192
+ else
193
+ await locator.uncheck({ timeout: this.worldConfig.stepTimeout });
194
+ }
195
+ else {
196
+ await locator.fill(value, { timeout: this.worldConfig.stepTimeout });
197
+ }
198
+ }
199
+ /**
200
+ * Scrolls the mouse wheel in a specified direction by a given number of pixels
201
+ * @example scroll("down", 100) => Scrolls down 100 pixels
202
+ * @example scroll("up", 50) => Scrolls up 50 pixels
203
+ * @example scroll("left", 200) => Scrolls left 200 pixels
204
+ * @example scroll("right") => Scrolls right using default 100 pixels
205
+ *
206
+ * @param direction The direction to scroll: "up", "down", "left", or "right"
207
+ * @param px The number of pixels to scroll (defaults to 100)
208
+ * @returns Promise<void>
209
+ */
210
+ async scroll(direction, px = 100) {
211
+ let horiz = direction.includes('t');
212
+ if (horiz)
213
+ await this.page.mouse.wheel(direction === 'right' ? px : -px, 0);
214
+ else
215
+ await this.page.mouse.wheel(0, direction === 'down' ? px : -px);
216
+ }
217
+ /**
218
+ * A helper function for parsing text on a page or in an element.
219
+ * Can be used to check for the presence OR absence of visible OR hidden text.
220
+ * Examples:
221
+ * @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
222
+ * @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
223
+ * @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)
224
+ * @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)
225
+ *
226
+ * @param locator the locator to check
227
+ * @param text the text to be found
228
+ * @param toBePresent whether a locator with the text should be present
229
+ * @param toBeVisible whether the locator with the text should be visible
230
+ * @returns void
231
+ */
232
+ async expectText(locator, text, toBePresent = true, toBeVisible = true) {
233
+ try {
234
+ await this.expectElement(locator.getByText(text), toBePresent, toBeVisible);
235
+ }
236
+ catch (e) {
237
+ throw new Error(`The${toBeVisible ? ' hidden' : ''} text "${text}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
238
+ }
239
+ }
240
+ /**
241
+ * A helper function for parsing elements on a page or in an element.
242
+ * Can be used to check for the presence OR absence of visible OR hidden elements.
243
+ * Examples:
244
+ * @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
245
+ * @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
246
+ * @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
247
+ * @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
248
+ *
249
+ * @param locator the locator to check
250
+ * @param toBePresent whether an element should be present
251
+ * @param toBeVisible whether the element should be visible
252
+ */
253
+ async expectElement(locator, toBePresent = true, toBeVisible = true) {
254
+ let visibleText = toBeVisible ? 'true' : '';
255
+ try {
256
+ if (toBePresent)
257
+ await test.expect(locator.locator(`visible=${visibleText}`).first()).toBeAttached({ timeout: this.worldConfig.stepTimeout });
258
+ else
259
+ await test.expect(locator.locator(`visible=${visibleText}`)).toHaveCount(0, { timeout: this.worldConfig.stepTimeout });
260
+ }
261
+ catch (e) {
262
+ throw new Error(`The${toBeVisible ? ' hidden' : ''} element "${locator}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
263
+ }
264
+ }
265
+ /**
266
+ * A helper function for getting a metatag from a page.
267
+ * @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
268
+ * @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
269
+ * @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
270
+ * @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
271
+ *
272
+ * @param page The playwright page to check
273
+ * @param name The name of the metatag to check
274
+ * @param expected The expected string to check
275
+ * @param exact Whether the expected string should be an exact match
276
+ * @param expectMatching Whether the expected string should match or NOT match
277
+ */
278
+ async expectMetatag(page, name, expected, exact, expectMatching = true) {
279
+ let actual;
280
+ if (name === 'title')
281
+ actual = await page.title();
282
+ else
283
+ actual = await (await page.locator(`meta[name="${name}"]`)).getAttribute('content');
284
+ let matches = exact ? actual === expected : actual?.includes(expected);
285
+ if (matches !== expectMatching) {
286
+ let word = exact ? 'exactly match' : 'contain';
287
+ let not = expectMatching ? '' : 'not ';
288
+ throw new Error(`Expected ${name} metatag ${not}to ${word} '${expected}' but got '${actual}'`);
289
+ }
290
+ }
291
+ async screenshot(opts) {
292
+ let explodedTags = this.info.explodedIdx ? `_(${this.info.tags.join(',')})` : '';
293
+ let path = opts?.name ? this.sanitizeFilepath(`${this.screenshotDir}/${opts.name}${explodedTags}.png`) : this.screenshotPath;
294
+ let locator = opts?.locator ?? this.page;
295
+ return await locator.screenshot({ path, ...this.worldConfig.screenshotOpts });
296
+ }
116
297
  }
117
298
  function getDimensions(size) {
118
299
  let [width, height] = size.split('x').map(Number);
@@ -124,4 +305,5 @@ quickpickle.After(async (world) => {
124
305
 
125
306
  exports.PlaywrightWorld = PlaywrightWorld;
126
307
  exports.defaultPlaywrightWorldConfig = defaultPlaywrightWorldConfig;
308
+ exports.projectRoot = projectRoot;
127
309
  //# 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,98 @@ 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 screenshotDir(): string;
72
+ get screenshotPath(): string;
73
+ get screenshotFilename(): string;
74
+ /**
75
+ * @deprecated Use `screenshotPath` instead
76
+ */
77
+ get fullScreenshotPath(): string;
78
+ /**
79
+ * Gets a locator based on a certain logic
80
+ * @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
81
+ * @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
82
+ * @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
83
+ *
84
+ * @param el The locator or page inside which to get a new locator
85
+ * @param identifier The value, label, placeholder, or css selector, depending on role
86
+ * @param role An ARIA role, "input", or "element"
87
+ * @param text Optional text to match inside the locator
88
+ * @returns Promise<void>
89
+ */
90
+ getLocator(el: Locator | Page, identifier: string, role: string | 'element' | 'input', text?: string | null): Locator;
91
+ /**
92
+ * Sets a value on a form element based on its type (select, checkbox/radio, or other input)
93
+ * @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
94
+ * @example setValue(locator, "true") => Checks a checkbox/radio button
95
+ * @example setValue(locator, "false") => Unchecks a checkbox/radio button
96
+ * @example setValue(locator, "Some text") => Fills a text input with "Some text"
97
+ *
98
+ * @param locator The Playwright locator for the form element
99
+ * @param value The value to set - can be string or other value type
100
+ * @returns Promise<void>
101
+ */
102
+ setValue(locator: Locator, value: string | any): Promise<void>;
103
+ /**
104
+ * Scrolls the mouse wheel in a specified direction by a given number of pixels
105
+ * @example scroll("down", 100) => Scrolls down 100 pixels
106
+ * @example scroll("up", 50) => Scrolls up 50 pixels
107
+ * @example scroll("left", 200) => Scrolls left 200 pixels
108
+ * @example scroll("right") => Scrolls right using default 100 pixels
109
+ *
110
+ * @param direction The direction to scroll: "up", "down", "left", or "right"
111
+ * @param px The number of pixels to scroll (defaults to 100)
112
+ * @returns Promise<void>
113
+ */
114
+ scroll(direction: "up" | "down" | "left" | "right", px?: number): Promise<void>;
115
+ /**
116
+ * A helper function for parsing text on a page or in an element.
117
+ * Can be used to check for the presence OR absence of visible OR hidden text.
118
+ * Examples:
119
+ * @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
120
+ * @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
121
+ * @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)
122
+ * @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)
123
+ *
124
+ * @param locator the locator to check
125
+ * @param text the text to be found
126
+ * @param toBePresent whether a locator with the text should be present
127
+ * @param toBeVisible whether the locator with the text should be visible
128
+ * @returns void
129
+ */
130
+ expectText(locator: Locator | Page, text: string, toBePresent?: boolean, toBeVisible?: boolean): Promise<void>;
131
+ /**
132
+ * A helper function for parsing elements on a page or in an element.
133
+ * Can be used to check for the presence OR absence of visible OR hidden elements.
134
+ * Examples:
135
+ * @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
136
+ * @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
137
+ * @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
138
+ * @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
139
+ *
140
+ * @param locator the locator to check
141
+ * @param toBePresent whether an element should be present
142
+ * @param toBeVisible whether the element should be visible
143
+ */
144
+ expectElement(locator: Locator | Page, toBePresent?: boolean, toBeVisible?: boolean): Promise<void>;
145
+ /**
146
+ * A helper function for getting a metatag from a page.
147
+ * @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
148
+ * @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
149
+ * @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
150
+ * @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
151
+ *
152
+ * @param page The playwright page to check
153
+ * @param name The name of the metatag to check
154
+ * @param expected The expected string to check
155
+ * @param exact Whether the expected string should be an exact match
156
+ * @param expectMatching Whether the expected string should match or NOT match
157
+ */
158
+ expectMetatag(page: Page, name: string, expected: string, exact: boolean, expectMatching?: boolean): Promise<void>;
159
+ screenshot(opts?: {
160
+ name?: string;
161
+ locator?: Locator;
162
+ }): Promise<Buffer<ArrayBufferLike>>;
64
163
  }
@@ -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,179 @@ 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 screenshotDir() {
128
+ return this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}`);
129
+ }
130
+ get screenshotPath() {
131
+ return this.sanitizeFilepath(`${this.projectRoot}/${this.worldConfig.screenshotDir}/${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`);
132
+ }
133
+ get screenshotFilename() {
134
+ return `${this.toString().replace(/^.+?Feature: /, 'Feature: ').replace(' ' + this.info.step, '')}.png`;
135
+ }
136
+ /**
137
+ * @deprecated Use `screenshotPath` instead
138
+ */
139
+ get fullScreenshotPath() {
140
+ return this.screenshotPath;
141
+ }
142
+ /**
143
+ * Gets a locator based on a certain logic
144
+ * @example getLocator(page, 'Cancel', 'button') => page.getByRole('button', { name: 'Cancel' })
145
+ * @example getLocator(page, 'Search', 'input') => page.getByLabel('Search').or(page.getByPlaceholder('Search'))
146
+ * @example getLocator(page, 'ul.fourteen-points li', 'element', 'Open covenants of peace') => page.locator('ul.fourteen-points li').filter({ hasText: 'Open covenants of peace' })
147
+ *
148
+ * @param el The locator or page inside which to get a new locator
149
+ * @param identifier The value, label, placeholder, or css selector, depending on role
150
+ * @param role An ARIA role, "input", or "element"
151
+ * @param text Optional text to match inside the locator
152
+ * @returns Promise<void>
153
+ */
154
+ getLocator(el, identifier, role, text = null) {
155
+ let locator;
156
+ if (role === 'element')
157
+ locator = el.locator(identifier);
158
+ else if (role === 'input')
159
+ locator = el.getByLabel(identifier).or(el.getByPlaceholder(identifier));
160
+ else
161
+ locator = el.getByRole(role, { name: identifier });
162
+ if (text && role !== 'input')
163
+ return locator.filter({ hasText: text });
164
+ return locator;
165
+ }
166
+ /**
167
+ * Sets a value on a form element based on its type (select, checkbox/radio, or other input)
168
+ * @example setValue(locator, "Option 1, Option 2") => Selects multiple options in a select element
169
+ * @example setValue(locator, "true") => Checks a checkbox/radio button
170
+ * @example setValue(locator, "false") => Unchecks a checkbox/radio button
171
+ * @example setValue(locator, "Some text") => Fills a text input with "Some text"
172
+ *
173
+ * @param locator The Playwright locator for the form element
174
+ * @param value The value to set - can be string or other value type
175
+ * @returns Promise<void>
176
+ */
177
+ async setValue(locator, value) {
178
+ 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 });
179
+ if (!tag)
180
+ throw new Error(`Could not find element with locator: ${locator.toString()}`);
181
+ if (tag === 'select') {
182
+ let values = value.split(/\s*(?<!\\),\s*/).map((v) => v.replace(/\\,/g, ','));
183
+ await locator.selectOption(values, { timeout: this.worldConfig.stepTimeout });
184
+ }
185
+ else if (type === 'checkbox' || type === 'radio' || role === 'checkbox') {
186
+ let check = !(['false', 'no', 'unchecked', '', 'null', 'undefined', '0'].includes(value.toString().toLowerCase()));
187
+ if (check)
188
+ await locator.check({ timeout: this.worldConfig.stepTimeout });
189
+ else
190
+ await locator.uncheck({ timeout: this.worldConfig.stepTimeout });
191
+ }
192
+ else {
193
+ await locator.fill(value, { timeout: this.worldConfig.stepTimeout });
194
+ }
195
+ }
196
+ /**
197
+ * Scrolls the mouse wheel in a specified direction by a given number of pixels
198
+ * @example scroll("down", 100) => Scrolls down 100 pixels
199
+ * @example scroll("up", 50) => Scrolls up 50 pixels
200
+ * @example scroll("left", 200) => Scrolls left 200 pixels
201
+ * @example scroll("right") => Scrolls right using default 100 pixels
202
+ *
203
+ * @param direction The direction to scroll: "up", "down", "left", or "right"
204
+ * @param px The number of pixels to scroll (defaults to 100)
205
+ * @returns Promise<void>
206
+ */
207
+ async scroll(direction, px = 100) {
208
+ let horiz = direction.includes('t');
209
+ if (horiz)
210
+ await this.page.mouse.wheel(direction === 'right' ? px : -px, 0);
211
+ else
212
+ await this.page.mouse.wheel(0, direction === 'down' ? px : -px);
213
+ }
214
+ /**
215
+ * A helper function for parsing text on a page or in an element.
216
+ * Can be used to check for the presence OR absence of visible OR hidden text.
217
+ * Examples:
218
+ * @example assertText(locator, 'text', true, true) // assert that a locator with the text is visible (and there may be hidden ones)
219
+ * @example assertText(locator, 'text', false, true) // assert that NO locator with the text is visible (but there may be hidden ones)
220
+ * @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)
221
+ * @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)
222
+ *
223
+ * @param locator the locator to check
224
+ * @param text the text to be found
225
+ * @param toBePresent whether a locator with the text should be present
226
+ * @param toBeVisible whether the locator with the text should be visible
227
+ * @returns void
228
+ */
229
+ async expectText(locator, text, toBePresent = true, toBeVisible = true) {
230
+ try {
231
+ await this.expectElement(locator.getByText(text), toBePresent, toBeVisible);
232
+ }
233
+ catch (e) {
234
+ throw new Error(`The${toBeVisible ? ' hidden' : ''} text "${text}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
235
+ }
236
+ }
237
+ /**
238
+ * A helper function for parsing elements on a page or in an element.
239
+ * Can be used to check for the presence OR absence of visible OR hidden elements.
240
+ * Examples:
241
+ * @example assertElement(locator, true) // assert that an element is visible (and there may be hidden ones)
242
+ * @example assertElement(locator, false) // assert that NO element is visible (but there may be hidden ones)
243
+ * @example assertElement(locator, true, false) // assert that a HIDDEN element IS FOUND on the page (but there may be visible ones)
244
+ * @example assertElement(locator, false, false) // assert that NO hidden element is found on the page (but there may be visible ones)
245
+ *
246
+ * @param locator the locator to check
247
+ * @param toBePresent whether an element should be present
248
+ * @param toBeVisible whether the element should be visible
249
+ */
250
+ async expectElement(locator, toBePresent = true, toBeVisible = true) {
251
+ let visibleText = toBeVisible ? 'true' : '';
252
+ try {
253
+ if (toBePresent)
254
+ await expect(locator.locator(`visible=${visibleText}`).first()).toBeAttached({ timeout: this.worldConfig.stepTimeout });
255
+ else
256
+ await expect(locator.locator(`visible=${visibleText}`)).toHaveCount(0, { timeout: this.worldConfig.stepTimeout });
257
+ }
258
+ catch (e) {
259
+ throw new Error(`The${toBeVisible ? ' hidden' : ''} element "${locator}" was unexpectedly ${toBePresent ? 'not present' : 'present'}.`);
260
+ }
261
+ }
262
+ /**
263
+ * A helper function for getting a metatag from a page.
264
+ * @example assertMetatag(page, 'title', 'Example') // assert that the page title CONTAINS "Example"
265
+ * @example assertMetatag(page, 'title', 'Example', true) // assert that the page title EQUALS "Example"
266
+ * @example assertMetatag(page, 'title', 'Example', true, false) // assert that the page title DOES NOT EQUAL "Example"
267
+ * @example assertMetatag(page, 'title', 'Example', false, false) // assert that the page title DOES NOT CONTAIN "Example"
268
+ *
269
+ * @param page The playwright page to check
270
+ * @param name The name of the metatag to check
271
+ * @param expected The expected string to check
272
+ * @param exact Whether the expected string should be an exact match
273
+ * @param expectMatching Whether the expected string should match or NOT match
274
+ */
275
+ async expectMetatag(page, name, expected, exact, expectMatching = true) {
276
+ let actual;
277
+ if (name === 'title')
278
+ actual = await page.title();
279
+ else
280
+ actual = await (await page.locator(`meta[name="${name}"]`)).getAttribute('content');
281
+ let matches = exact ? actual === expected : actual?.includes(expected);
282
+ if (matches !== expectMatching) {
283
+ let word = exact ? 'exactly match' : 'contain';
284
+ let not = expectMatching ? '' : 'not ';
285
+ throw new Error(`Expected ${name} metatag ${not}to ${word} '${expected}' but got '${actual}'`);
286
+ }
287
+ }
288
+ async screenshot(opts) {
289
+ let explodedTags = this.info.explodedIdx ? `_(${this.info.tags.join(',')})` : '';
290
+ let path = opts?.name ? this.sanitizeFilepath(`${this.screenshotDir}/${opts.name}${explodedTags}.png`) : this.screenshotPath;
291
+ let locator = opts?.locator ?? this.page;
292
+ return await locator.screenshot({ path, ...this.worldConfig.screenshotOpts });
293
+ }
114
294
  }
115
295
  function getDimensions(size) {
116
296
  let [width, height] = size.split('x').map(Number);
@@ -120,5 +300,5 @@ After(async (world) => {
120
300
  await world.browserContext.close();
121
301
  });
122
302
 
123
- export { PlaywrightWorld, defaultPlaywrightWorldConfig };
303
+ export { PlaywrightWorld, defaultPlaywrightWorldConfig, projectRoot };
124
304
  //# 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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"}