@quickpickle/playwright 0.10.5 → 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.
@@ -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
  }
@@ -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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"}