@vitest/browser 4.0.0-beta.13 → 4.0.0-beta.15
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/context.d.ts +50 -9
- package/context.js +3 -2
- package/dist/client/.vite/manifest.json +2 -2
- package/dist/client/__vitest__/assets/{index-C15NF4dG.js → index-CKAjAT2u.js} +1 -1
- package/dist/client/__vitest__/index.html +1 -1
- package/dist/client/__vitest_browser__/{orchestrator-Pdu7HCGX.js → orchestrator-Ce7D5fGP.js} +8 -6
- package/dist/client/__vitest_browser__/{tester-DYNLfPFH.js → tester-Vm4ppAv-.js} +4 -1
- package/dist/client/orchestrator.html +1 -1
- package/dist/client/tester/tester.html +1 -1
- package/dist/client.js +1 -1
- package/dist/context.js +70 -12
- package/dist/expect-element.js +1 -1
- package/dist/{public-utils-B6exS8fl.js → index-BnLTaCRv.js} +3 -3
- package/dist/index.d.ts +36 -172
- package/dist/index.js +515 -1487
- package/dist/{locators/index.d.ts → locators.d.ts} +25 -2
- package/dist/locators.js +1 -0
- package/jest-dom.d.ts +5 -5
- package/matchers.d.ts +1 -1
- package/package.json +11 -33
- package/utils.d.ts +5 -5
- package/dist/index-BPDFwkoW.js +0 -1
- package/dist/index-CwoiDq7G.js +0 -6
- package/dist/locators/index.js +0 -1
- package/dist/locators/playwright.js +0 -1
- package/dist/locators/preview.js +0 -1
- package/dist/locators/webdriverio.js +0 -1
- package/dist/providers/playwright.d.ts +0 -105
- package/dist/providers/playwright.js +0 -385
- package/dist/providers/preview.d.ts +0 -16
- package/dist/providers/preview.js +0 -44
- package/dist/providers/webdriverio.d.ts +0 -51
- package/dist/providers/webdriverio.js +0 -206
- package/dist/utils.js +0 -1
- package/providers.d.ts +0 -7
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UserEventClickOptions, UserEventClearOptions, UserEventHoverOptions, UserEventFillOptions, UserEventUploadOptions, UserEventDragAndDropOptions, UserEventSelectOptions, LocatorScreenshotOptions, LocatorByRoleOptions, LocatorOptions } from '
|
|
1
|
+
import { UserEventClickOptions, UserEventClearOptions, UserEventHoverOptions, UserEventFillOptions, UserEventUploadOptions, UserEventDragAndDropOptions, UserEventSelectOptions, LocatorScreenshotOptions, LocatorByRoleOptions, LocatorOptions } from 'vitest/browser';
|
|
2
2
|
|
|
3
3
|
type ClauseCombinator = '' | '>' | '+' | '~' | '>=';
|
|
4
4
|
type CSSFunctionArgument = CSSComplexSelector | number | string;
|
|
@@ -181,6 +181,23 @@ interface ByRoleOptions {
|
|
|
181
181
|
pressed?: boolean;
|
|
182
182
|
selected?: boolean;
|
|
183
183
|
}
|
|
184
|
+
declare function getByTestIdSelector(testIdAttributeName: string, testId: string | RegExp): string;
|
|
185
|
+
declare function getByLabelSelector(text: string | RegExp, options?: {
|
|
186
|
+
exact?: boolean;
|
|
187
|
+
}): string;
|
|
188
|
+
declare function getByAltTextSelector(text: string | RegExp, options?: {
|
|
189
|
+
exact?: boolean;
|
|
190
|
+
}): string;
|
|
191
|
+
declare function getByTitleSelector(text: string | RegExp, options?: {
|
|
192
|
+
exact?: boolean;
|
|
193
|
+
}): string;
|
|
194
|
+
declare function getByPlaceholderSelector(text: string | RegExp, options?: {
|
|
195
|
+
exact?: boolean;
|
|
196
|
+
}): string;
|
|
197
|
+
declare function getByTextSelector(text: string | RegExp, options?: {
|
|
198
|
+
exact?: boolean;
|
|
199
|
+
}): string;
|
|
200
|
+
declare function getByRoleSelector(role: string, options?: ByRoleOptions): string;
|
|
184
201
|
|
|
185
202
|
/**
|
|
186
203
|
* Copyright (c) Microsoft Corporation.
|
|
@@ -279,6 +296,12 @@ interface SelectorEngine {
|
|
|
279
296
|
queryAll: (root: SelectorRoot, selector: string | any) => Element[];
|
|
280
297
|
}
|
|
281
298
|
|
|
299
|
+
declare function convertElementToCssSelector(element: Element): string;
|
|
300
|
+
declare function processTimeoutOptions<T extends {
|
|
301
|
+
timeout?: number;
|
|
302
|
+
}>(options_?: T): T | undefined;
|
|
303
|
+
declare function getIframeScale(): number;
|
|
304
|
+
|
|
282
305
|
declare const selectorEngine: Ivya;
|
|
283
306
|
declare abstract class Locator {
|
|
284
307
|
abstract selector: string;
|
|
@@ -328,4 +351,4 @@ declare abstract class Locator {
|
|
|
328
351
|
protected triggerCommand<T>(command: string, ...args: any[]): Promise<T>;
|
|
329
352
|
}
|
|
330
353
|
|
|
331
|
-
export { Locator, selectorEngine };
|
|
354
|
+
export { Locator, convertElementToCssSelector, getByAltTextSelector, getByLabelSelector, getByPlaceholderSelector, getByRoleSelector, getByTestIdSelector, getByTextSelector, getByTitleSelector, getIframeScale, processTimeoutOptions, selectorEngine };
|
package/dist/locators.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{L as Locator,o as convertElementToCssSelector,r as getByAltTextSelector,t as getByLabelSelector,u as getByPlaceholderSelector,v as getByRoleSelector,w as getByTestIdSelector,x as getByTextSelector,y as getByTitleSelector,q as getIframeScale,p as processTimeoutOptions,s as selectorEngine}from"./index-BnLTaCRv.js";import"vitest/browser";import"vitest/internal/browser";
|
package/jest-dom.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export interface TestingLibraryMatchers<E, R> {
|
|
|
23
23
|
* This matcher calculates the intersection ratio between the element and the viewport, similar to the
|
|
24
24
|
* IntersectionObserver API.
|
|
25
25
|
*
|
|
26
|
-
* The element must be in the document and have visible dimensions. Elements with display: none or
|
|
26
|
+
* The element must be in the document and have visible dimensions. Elements with display: none or
|
|
27
27
|
* visibility: hidden are considered not in viewport.
|
|
28
28
|
* @example
|
|
29
29
|
* <div
|
|
@@ -34,7 +34,7 @@ export interface TestingLibraryMatchers<E, R> {
|
|
|
34
34
|
* </div>
|
|
35
35
|
*
|
|
36
36
|
* <div
|
|
37
|
-
* data-testid="hidden-element"
|
|
37
|
+
* data-testid="hidden-element"
|
|
38
38
|
* style="position: fixed; top: -100px; left: 10px; width: 50px; height: 50px;"
|
|
39
39
|
* >
|
|
40
40
|
* Hidden Element
|
|
@@ -49,13 +49,13 @@ export interface TestingLibraryMatchers<E, R> {
|
|
|
49
49
|
*
|
|
50
50
|
* // Check if any part of element is in viewport
|
|
51
51
|
* await expect.element(page.getByTestId('visible-element')).toBeInViewport()
|
|
52
|
-
*
|
|
52
|
+
*
|
|
53
53
|
* // Check if element is outside viewport
|
|
54
54
|
* await expect.element(page.getByTestId('hidden-element')).not.toBeInViewport()
|
|
55
|
-
*
|
|
55
|
+
*
|
|
56
56
|
* // Check if at least 50% of element is visible
|
|
57
57
|
* await expect.element(page.getByTestId('large-element')).toBeInViewport({ ratio: 0.5 })
|
|
58
|
-
*
|
|
58
|
+
*
|
|
59
59
|
* // Check if element is completely visible
|
|
60
60
|
* await expect.element(page.getByTestId('visible-element')).toBeInViewport({ ratio: 1 })
|
|
61
61
|
* @see https://vitest.dev/guide/browser/assertion-api#tobeinviewport
|
package/matchers.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitest/browser",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.15",
|
|
5
5
|
"description": "Browser running for Vitest",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://opencollective.com/vitest",
|
|
@@ -20,10 +20,6 @@
|
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
21
|
"default": "./dist/index.js"
|
|
22
22
|
},
|
|
23
|
-
"./providers/*": {
|
|
24
|
-
"types": "./dist/providers/*.d.ts",
|
|
25
|
-
"default": "./dist/providers/*.js"
|
|
26
|
-
},
|
|
27
23
|
"./context": {
|
|
28
24
|
"types": "./context.d.ts",
|
|
29
25
|
"default": "./context.js"
|
|
@@ -35,15 +31,15 @@
|
|
|
35
31
|
"types": "./matchers.d.ts",
|
|
36
32
|
"default": "./dummy.js"
|
|
37
33
|
},
|
|
38
|
-
"./
|
|
39
|
-
"types": "./dist/locators
|
|
40
|
-
"default": "./dist/locators
|
|
34
|
+
"./locators": {
|
|
35
|
+
"types": "./dist/locators.d.ts",
|
|
36
|
+
"default": "./dist/locators.js"
|
|
41
37
|
},
|
|
42
38
|
"./utils": {
|
|
43
39
|
"types": "./utils.d.ts",
|
|
44
40
|
"default": "./dist/utils.js"
|
|
45
41
|
},
|
|
46
|
-
"
|
|
42
|
+
"./package.json": "./package.json"
|
|
47
43
|
},
|
|
48
44
|
"main": "./dist/index.js",
|
|
49
45
|
"module": "./dist/index.js",
|
|
@@ -56,47 +52,29 @@
|
|
|
56
52
|
"providers"
|
|
57
53
|
],
|
|
58
54
|
"peerDependencies": {
|
|
59
|
-
"
|
|
60
|
-
"webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0",
|
|
61
|
-
"vitest": "4.0.0-beta.13"
|
|
62
|
-
},
|
|
63
|
-
"peerDependenciesMeta": {
|
|
64
|
-
"playwright": {
|
|
65
|
-
"optional": true
|
|
66
|
-
},
|
|
67
|
-
"safaridriver": {
|
|
68
|
-
"optional": true
|
|
69
|
-
},
|
|
70
|
-
"webdriverio": {
|
|
71
|
-
"optional": true
|
|
72
|
-
}
|
|
55
|
+
"vitest": "4.0.0-beta.15"
|
|
73
56
|
},
|
|
74
57
|
"dependencies": {
|
|
75
|
-
"@testing-library/dom": "^10.4.1",
|
|
76
|
-
"@testing-library/user-event": "^14.6.1",
|
|
77
58
|
"magic-string": "^0.30.19",
|
|
78
59
|
"pixelmatch": "7.1.0",
|
|
79
60
|
"pngjs": "^7.0.0",
|
|
80
61
|
"sirv": "^3.0.2",
|
|
81
62
|
"tinyrainbow": "^3.0.3",
|
|
82
63
|
"ws": "^8.18.3",
|
|
83
|
-
"@vitest/mocker": "4.0.0-beta.
|
|
84
|
-
"@vitest/utils": "4.0.0-beta.
|
|
64
|
+
"@vitest/mocker": "4.0.0-beta.15",
|
|
65
|
+
"@vitest/utils": "4.0.0-beta.15"
|
|
85
66
|
},
|
|
86
67
|
"devDependencies": {
|
|
68
|
+
"@testing-library/user-event": "^14.6.1",
|
|
87
69
|
"@types/pngjs": "^6.0.5",
|
|
88
70
|
"@types/ws": "^8.18.1",
|
|
89
|
-
"@wdio/types": "^9.19.2",
|
|
90
71
|
"birpc": "^2.5.0",
|
|
91
72
|
"flatted": "^3.3.3",
|
|
92
73
|
"ivya": "^1.7.0",
|
|
93
74
|
"mime": "^4.1.0",
|
|
94
75
|
"pathe": "^2.0.3",
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"webdriverio": "^9.19.2",
|
|
98
|
-
"@vitest/runner": "4.0.0-beta.13",
|
|
99
|
-
"vitest": "4.0.0-beta.13"
|
|
76
|
+
"@vitest/runner": "4.0.0-beta.15",
|
|
77
|
+
"vitest": "4.0.0-beta.15"
|
|
100
78
|
},
|
|
101
79
|
"scripts": {
|
|
102
80
|
"typecheck": "tsc -p ./src/client/tsconfig.json --noEmit",
|
package/utils.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
// we cannot bundle it because vitest depend on the @vitest/browser and vice versa
|
|
3
|
-
// fortunately, the file is quite small
|
|
4
|
-
|
|
5
|
-
import { LocatorSelectors, Locator } from '@vitest/browser/context'
|
|
1
|
+
import { LocatorSelectors, Locator } from './context'
|
|
6
2
|
import { StringifyOptions } from 'vitest/internal/browser'
|
|
7
3
|
|
|
8
4
|
export type PrettyDOMOptions = Omit<StringifyOptions, 'maxLength'>
|
|
9
5
|
|
|
6
|
+
/** @deprecated use `import('vitest/browser').utils.getElementLocatorSelectors` instead */
|
|
10
7
|
export declare function getElementLocatorSelectors(element: Element): LocatorSelectors
|
|
8
|
+
/** @deprecated use `import('vitest/browser').utils.debug` instead */
|
|
11
9
|
export declare function debug(
|
|
12
10
|
el?: Element | Locator | null | (Element | Locator)[],
|
|
13
11
|
maxLength?: number,
|
|
14
12
|
options?: PrettyDOMOptions,
|
|
15
13
|
): void
|
|
14
|
+
/** @deprecated use `import('vitest/browser').utils.prettyDOM` instead */
|
|
16
15
|
export declare function prettyDOM(
|
|
17
16
|
dom?: Element | Locator | undefined | null,
|
|
18
17
|
maxLength?: number,
|
|
19
18
|
prettyFormatOptions?: PrettyDOMOptions,
|
|
20
19
|
): string
|
|
20
|
+
/** @deprecated use `import('vitest/browser').utils.getElementError` instead */
|
|
21
21
|
export declare function getElementError(selector: string, container?: Element): Error
|
package/dist/index-BPDFwkoW.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{server,page}from"@vitest/browser/context";import{I as Ivya,e as getByRoleSelector,c as getByAltTextSelector,f as getByLabelSelector,b as getByPlaceholderSelector,d as getByTestIdSelector,a as getByTextSelector,g as getByTitleSelector,h as getElementError}from"./public-utils-B6exS8fl.js";function ensureAwaited(e){let S=getWorkerState().current;if(!S||S.type!==`test`)return e();let C=!1,w=Error(`STACK_TRACE_ERROR`);S.onFinished??=[],S.onFinished.push(()=>{if(!C){let e=Error(`The call was not awaited. This method is asynchronous and must be awaited; otherwise, the call will not start to avoid unhandled rejections.`);throw e.stack=w.stack?.replace(w.message,e.message),e}});let T;return{then(S,E){return C=!0,(T||=e(w)).then(S,E)},catch(S){return(T||=e(w)).catch(S)},finally(S){return(T||=e(w)).finally(S)},[Symbol.toStringTag]:`Promise`}}function getBrowserState(){return window.__vitest_browser_runner__}function getWorkerState(){let e=window.__vitest_worker__;if(!e)throw Error(`Worker state is not found. This is an issue with Vitest. Please, open an issue.`);return e}const provider=getBrowserState().provider;function convertElementToCssSelector(e){if(!e||!(e instanceof Element))throw Error(`Expected DOM element to be an instance of Element, received ${typeof e}`);return getUniqueCssSelector(e)}function escapeIdForCSSSelector(e){return e.split(``).map(e=>{let S=e.charCodeAt(0);return e===` `||e===`#`||e===`.`||e===`:`||e===`[`||e===`]`||e===`>`||e===`+`||e===`~`||e===`\\`?`\\${e}`:S>=65536?`\\${S.toString(16).toUpperCase().padStart(6,`0`)} `:S<32||S===127||S>=128?`\\${S.toString(16).toUpperCase().padStart(2,`0`)} `:e}).join(``)}function getUniqueCssSelector(e){let S=[],C,w=!1;for(;C=getParent(e);){C.shadowRoot&&(w=!0);let T=e.tagName;if(e.id)S.push(`#${escapeIdForCSSSelector(e.id)}`);else if(!e.nextElementSibling&&!e.previousElementSibling)S.push(T.toLowerCase());else{let w=0,E=0,D=0;for(let S of C.children)w++,S.tagName===T&&E++,S===e&&(D=w);E>1?S.push(`${T.toLowerCase()}:nth-child(${D})`):S.push(T.toLowerCase())}e=C}return`${getBrowserState().provider===`webdriverio`&&w?`>>>`:``}${S.reverse().join(` > `)}`}function getParent(e){let S=e.parentNode;return S instanceof ShadowRoot?S.host:S}const now=Date.now;function processTimeoutOptions(e){if(e&&e.timeout!=null||provider!==`playwright`||getWorkerState().config.browser.providerOptions.actionTimeout!=null)return e;let S=getBrowserState().runner,C=S._currentTaskStartTime;if(!C)return e;let w=S._currentTaskTimeout;if(w===0||w==null||w===1/0)return e;e||={};let T=now(),E=C+w-T;return E<=0||(e.timeout=E-100),e}function getIframeScale(){let e=window.parent.document.querySelector(`iframe[data-vitest]`)?.parentElement;if(!e)throw Error(`Cannot find Tester element. This is a bug in Vitest. Please, open a new issue with reproduction.`);let S=e.getAttribute(`data-scale`),C=Number(S);if(Number.isNaN(C))throw TypeError(`Cannot parse scale value from Tester element (${S}). This is a bug in Vitest. Please, open a new issue with reproduction.`);return C}function escapeRegexForSelector(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function escapeForTextSelector(e,S){return typeof e==`string`?`${JSON.stringify(e)}i`:escapeRegexForSelector(e)}function convertToSelector(e){if(!e)throw Error(`Expected element or locator to be defined.`);if(e instanceof Element)return convertElementToCssSelector(e);if(`selector`in e)return e.selector;throw Error(`Expected element or locator to be an instance of Element or Locator.`)}const selectorEngine=Ivya.create({browser:(e=>{switch(e){case`edge`:case`chrome`:return`chromium`;case`safari`:return`webkit`;default:return e}})(server.config.browser.name),testIdAttribute:server.config.browser.locators.testIdAttribute}),kLocator=Symbol.for(`$$vitest:locator`);class Locator{_parsedSelector;_container;_pwSelector;constructor(){Object.defineProperty(this,kLocator,{enumerable:!1,writable:!1,configurable:!1,value:kLocator})}click(e={}){return this.triggerCommand(`__vitest_click`,this.selector,e)}dblClick(e={}){return this.triggerCommand(`__vitest_dblClick`,this.selector,e)}tripleClick(e={}){return this.triggerCommand(`__vitest_tripleClick`,this.selector,e)}clear(e){return this.triggerCommand(`__vitest_clear`,this.selector,e)}hover(e){return this.triggerCommand(`__vitest_hover`,this.selector,e)}unhover(e){return this.triggerCommand(`__vitest_hover`,`html > body`,e)}fill(e,S){return this.triggerCommand(`__vitest_fill`,this.selector,e,S)}async upload(e,S){let C=(Array.isArray(e)?e:[e]).map(async e=>{if(typeof e==`string`)return e;let S=await new Promise((S,C)=>{let w=new FileReader;w.onload=()=>S(w.result),w.onerror=()=>C(Error(`Failed to read file: ${e.name}`)),w.readAsDataURL(e)});return{name:e.name,mimeType:e.type,base64:S}});return this.triggerCommand(`__vitest_upload`,this.selector,await Promise.all(C),S)}dropTo(e,S={}){return this.triggerCommand(`__vitest_dragAndDrop`,this.selector,e.selector,S)}selectOptions(e,S){let C=(Array.isArray(e)?e:[e]).map(e=>typeof e==`string`?e:{element:`element`in e?e.selector:selectorEngine.generateSelectorSimple(e)});return this.triggerCommand(`__vitest_selectOptions`,this.selector,C,S)}screenshot(e){return page.screenshot({...e,element:this})}getByRole(e,S){return this.locator(getByRoleSelector(e,S))}getByAltText(e,S){return this.locator(getByAltTextSelector(e,S))}getByLabelText(e,S){return this.locator(getByLabelSelector(e,S))}getByPlaceholder(e,S){return this.locator(getByPlaceholderSelector(e,S))}getByTestId(S){return this.locator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,S))}getByText(e,S){return this.locator(getByTextSelector(e,S))}getByTitle(e,S){return this.locator(getByTitleSelector(e,S))}filter(e){let S=[];if(e?.hasText&&S.push(`internal:has-text=${escapeForTextSelector(e.hasText)}`),e?.hasNotText&&S.push(`internal:has-not-text=${escapeForTextSelector(e.hasNotText)}`),e?.has){let C=e.has;S.push(`internal:has=${JSON.stringify(C._pwSelector||C.selector)}`)}if(e?.hasNot){let C=e.hasNot;S.push(`internal:has-not=${JSON.stringify(C._pwSelector||C.selector)}`)}if(!S.length)throw Error(`Locator.filter expects at least one filter. None provided.`);return this.locator(S.join(` >> `))}and(e){return this.locator(`internal:and=${JSON.stringify(e._pwSelector||e.selector)}`)}or(e){return this.locator(`internal:or=${JSON.stringify(e._pwSelector||e.selector)}`)}query(){let e=this._parsedSelector||=selectorEngine.parseSelector(this._pwSelector||this.selector);return selectorEngine.querySelector(e,document.documentElement,!0)}element(){let e=this.query();if(!e)throw getElementError(this._pwSelector||this.selector,this._container||document.body);return e}elements(){let e=this._parsedSelector||=selectorEngine.parseSelector(this._pwSelector||this.selector);return selectorEngine.querySelectorAll(e,document.documentElement)}get length(){return this.elements().length}all(){return this.elements().map(e=>this.elementLocator(e))}nth(e){return this.locator(`nth=${e}`)}first(){return this.nth(0)}last(){return this.nth(-1)}toString(){return this.selector}toJSON(){return this.selector}triggerCommand(e,...S){let C=getBrowserState().commands;return ensureAwaited(w=>C.triggerCommand(e,S,w))}}export{Locator as L,getBrowserState as a,getWorkerState as b,convertElementToCssSelector as c,convertToSelector as d,getIframeScale as g,processTimeoutOptions as p,selectorEngine as s};
|
package/dist/index-CwoiDq7G.js
DELETED
package/dist/locators/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"@vitest/browser/context";import"../public-utils-B6exS8fl.js";export{L as Locator,s as selectorEngine}from"../index-BPDFwkoW.js";import"vitest/internal/browser";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector}from"../public-utils-B6exS8fl.js";import{s as selectorEngine,L as Locator,p as processTimeoutOptions,g as getIframeScale}from"../index-BPDFwkoW.js";import"vitest/internal/browser";page.extend({getByLabelText(e,_){return new PlaywrightLocator(getByLabelSelector(e,_))},getByRole(e,_){return new PlaywrightLocator(getByRoleSelector(e,_))},getByTestId(e){return new PlaywrightLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,_){return new PlaywrightLocator(getByAltTextSelector(e,_))},getByPlaceholder(e,_){return new PlaywrightLocator(getByPlaceholderSelector(e,_))},getByText(e,_){return new PlaywrightLocator(getByTextSelector(e,_))},getByTitle(e,_){return new PlaywrightLocator(getByTitleSelector(e,_))},_createLocator(e){return new PlaywrightLocator(e)},elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)},frameLocator(e){return new PlaywrightLocator(`${e.selector} >> internal:control=enter-frame`)}});class PlaywrightLocator extends Locator{constructor(e,_){super(),this.selector=e,this._container=_}click(e){return super.click(processTimeoutOptions(processClickOptions(e)))}dblClick(e){return super.dblClick(processTimeoutOptions(processClickOptions(e)))}tripleClick(e){return super.tripleClick(processTimeoutOptions(processClickOptions(e)))}selectOptions(e,_){return super.selectOptions(e,processTimeoutOptions(_))}clear(e){return super.clear(processTimeoutOptions(e))}hover(e){return super.hover(processTimeoutOptions(processHoverOptions(e)))}upload(e,_){return super.upload(e,processTimeoutOptions(_))}fill(e,_){return super.fill(e,processTimeoutOptions(_))}dropTo(e,_){return super.dropTo(e,processTimeoutOptions(processDragAndDropOptions(_)))}locator(e){return new PlaywrightLocator(`${this.selector} >> ${e}`,this._container)}elementLocator(e){return new PlaywrightLocator(selectorEngine.generateSelectorSimple(e),e)}}function processDragAndDropOptions(e){if(!e)return e;let _=e;return _.sourcePosition&&=processPlaywrightPosition(_.sourcePosition),_.targetPosition&&=processPlaywrightPosition(_.targetPosition),e}function processHoverOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),e}function processClickOptions(e){if(!e)return e;let _=e;return _.position&&=processPlaywrightPosition(_.position),_}function processPlaywrightPosition(e){let _=getIframeScale();return e.x!=null&&(e.x*=_),e.y!=null&&(e.y*=_),e}
|
package/dist/locators/preview.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{page,server,userEvent}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-B6exS8fl.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector}from"../index-BPDFwkoW.js";import"vitest/internal/browser";page.extend({getByLabelText(e,m){return new PreviewLocator(getByLabelSelector(e,m))},getByRole(e,m){return new PreviewLocator(getByRoleSelector(e,m))},getByTestId(e){return new PreviewLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,m){return new PreviewLocator(getByAltTextSelector(e,m))},getByPlaceholder(e,m){return new PreviewLocator(getByPlaceholderSelector(e,m))},getByText(e,m){return new PreviewLocator(getByTextSelector(e,m))},getByTitle(e,m){return new PreviewLocator(getByTitleSelector(e,m))},_createLocator(e){return new PreviewLocator(e)},elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}});class PreviewLocator extends Locator{constructor(e,m){super(),this._pwSelector=e,this._container=m}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);return e.join(`, `)}click(){return userEvent.click(this.element())}dblClick(){return userEvent.dblClick(this.element())}tripleClick(){return userEvent.tripleClick(this.element())}hover(){return userEvent.hover(this.element())}unhover(){return userEvent.unhover(this.element())}async fill(e){return userEvent.fill(this.element(),e)}async upload(e){return userEvent.upload(this.element(),e)}selectOptions(e){return userEvent.selectOptions(this.element(),e)}clear(){return userEvent.clear(this.element())}locator(e){return new PreviewLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new PreviewLocator(selectorEngine.generateSelectorSimple(e),e)}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{page,server}from"@vitest/browser/context";import{g as getByTitleSelector,a as getByTextSelector,b as getByPlaceholderSelector,c as getByAltTextSelector,d as getByTestIdSelector,e as getByRoleSelector,f as getByLabelSelector,h as getElementError}from"../public-utils-B6exS8fl.js";import{s as selectorEngine,L as Locator,c as convertElementToCssSelector,a as getBrowserState,g as getIframeScale}from"../index-BPDFwkoW.js";import"vitest/internal/browser";page.extend({getByLabelText(e,g){return new WebdriverIOLocator(getByLabelSelector(e,g))},getByRole(e,g){return new WebdriverIOLocator(getByRoleSelector(e,g))},getByTestId(e){return new WebdriverIOLocator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,e))},getByAltText(e,g){return new WebdriverIOLocator(getByAltTextSelector(e,g))},getByPlaceholder(e,g){return new WebdriverIOLocator(getByPlaceholderSelector(e,g))},getByText(e,g){return new WebdriverIOLocator(getByTextSelector(e,g))},getByTitle(e,g){return new WebdriverIOLocator(getByTitleSelector(e,g))},_createLocator(e){return new WebdriverIOLocator(e)},elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e))}});class WebdriverIOLocator extends Locator{constructor(e,g){super(),this._pwSelector=e,this._container=g}get selector(){let e=this.elements().map(e=>convertElementToCssSelector(e));if(!e.length)throw getElementError(this._pwSelector,this._container||document.body);let g=!1,_=e.map(e=>e.startsWith(`>>>`)?(g=!0,e.slice(3)):e);return(g?`>>>`:``)+_.join(`, `)}click(e){return super.click(processClickOptions(e))}dblClick(e){return super.dblClick(processClickOptions(e))}tripleClick(e){return super.tripleClick(processClickOptions(e))}selectOptions(e,g){let _=getWebdriverioSelectOptions(this.element(),e);return this.triggerCommand(`__vitest_selectOptions`,this.selector,_,g)}hover(e){return super.hover(processHoverOptions(e))}dropTo(e,g){return super.dropTo(e,processDragAndDropOptions(g))}locator(e){return new WebdriverIOLocator(`${this._pwSelector} >> ${e}`,this._container)}elementLocator(e){return new WebdriverIOLocator(selectorEngine.generateSelectorSimple(e),e)}}function getWebdriverioSelectOptions(e,g){let _=[...e.querySelectorAll(`option`)],v=Array.isArray(g)?g:[g];if(!v.length)return[];if(v.length>1)throw Error(`Provider "webdriverio" doesn't support selecting multiple values at once`);let y=v[0];if(typeof y!=`string`){let e=`element`in y?y.element():y,g=_.indexOf(e);if(g===-1)throw Error(`The element ${selectorEngine.previewNode(e)} was not found in the "select" options.`);return[{index:g}]}let b=_.findIndex(e=>e.value===y);if(b!==-1)return[{index:b}];let x=_.findIndex(e=>e.textContent?.trim()===y||e.ariaLabel===y);if(x===-1)throw Error(`The option "${y}" was not found in the "select" options.`);return[{index:x}]}function processClickOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e;if(g.x!=null||g.y!=null){let e={};g.x!=null&&(g.x=scaleCoordinate(g.x,e)),g.y!=null&&(g.y=scaleCoordinate(g.y,e))}return e}function processHoverOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g=e,_={};return g.xOffset!=null&&(g.xOffset=scaleCoordinate(g.xOffset,_)),g.yOffset!=null&&(g.yOffset=scaleCoordinate(g.yOffset,_)),e}function processDragAndDropOptions(e){if(!e||!getBrowserState().config.browser.ui)return e;let g={},_=e;return _.sourceX!=null&&(_.sourceX=scaleCoordinate(_.sourceX,g)),_.sourceY!=null&&(_.sourceY=scaleCoordinate(_.sourceY,g)),_.targetX!=null&&(_.targetX=scaleCoordinate(_.targetX,g)),_.targetY!=null&&(_.targetY=scaleCoordinate(_.targetY,g)),e}function scaleCoordinate(e,g){return Math.round(e*getCachedScale(g))}function getCachedScale(e){return e.scale??=getIframeScale()}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { ScreenshotMatcherOptions, ScreenshotComparatorRegistry } from '@vitest/browser/context';
|
|
2
|
-
import { Page, Frame, FrameLocator, BrowserContext, LaunchOptions, ConnectOptions, BrowserContextOptions, Browser } from 'playwright';
|
|
3
|
-
import { Protocol } from 'playwright-core/types/protocol';
|
|
4
|
-
import { BrowserProviderOption, BrowserProvider, BrowserModuleMocker, TestProject, CDPSession } from 'vitest/node';
|
|
5
|
-
|
|
6
|
-
declare const playwrightBrowsers: readonly ["firefox", "webkit", "chromium"];
|
|
7
|
-
type PlaywrightBrowser = (typeof playwrightBrowsers)[number];
|
|
8
|
-
interface PlaywrightProviderOptions {
|
|
9
|
-
/**
|
|
10
|
-
* The options passed down to [`playwright.connect`](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) method.
|
|
11
|
-
* @see {@link https://playwright.dev/docs/api/class-browsertype#browser-type-launch}
|
|
12
|
-
*/
|
|
13
|
-
launchOptions?: Omit<LaunchOptions, "tracesDir">;
|
|
14
|
-
/**
|
|
15
|
-
* The options passed down to [`playwright.connect`](https://playwright.dev/docs/api/class-browsertype#browser-type-connect) method.
|
|
16
|
-
*
|
|
17
|
-
* This is used only if you connect remotely to the playwright instance via a WebSocket connection.
|
|
18
|
-
* @see {@link https://playwright.dev/docs/api/class-browsertype#browser-type-connect}
|
|
19
|
-
*/
|
|
20
|
-
connectOptions?: ConnectOptions & {
|
|
21
|
-
wsEndpoint: string;
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* The options passed down to [`browser.newContext`](https://playwright.dev/docs/api/class-browser#browser-new-context) method.
|
|
25
|
-
* @see {@link https://playwright.dev/docs/api/class-browser#browser-new-context}
|
|
26
|
-
*/
|
|
27
|
-
contextOptions?: Omit<BrowserContextOptions, "ignoreHTTPSErrors" | "serviceWorkers">;
|
|
28
|
-
/**
|
|
29
|
-
* The maximum time in milliseconds to wait for `userEvent` action to complete.
|
|
30
|
-
* @default 0 (no timeout)
|
|
31
|
-
*/
|
|
32
|
-
actionTimeout?: number;
|
|
33
|
-
}
|
|
34
|
-
declare function playwright(options?: PlaywrightProviderOptions): BrowserProviderOption<PlaywrightProviderOptions>;
|
|
35
|
-
declare class PlaywrightBrowserProvider implements BrowserProvider {
|
|
36
|
-
private project;
|
|
37
|
-
private options;
|
|
38
|
-
name: "playwright";
|
|
39
|
-
supportsParallelism: boolean;
|
|
40
|
-
browser: Browser | null;
|
|
41
|
-
contexts: Map<string, BrowserContext>;
|
|
42
|
-
pages: Map<string, Page>;
|
|
43
|
-
mocker: BrowserModuleMocker;
|
|
44
|
-
browserName: PlaywrightBrowser;
|
|
45
|
-
private browserPromise;
|
|
46
|
-
private closing;
|
|
47
|
-
tracingContexts: Set<string>;
|
|
48
|
-
pendingTraces: Map<string, string>;
|
|
49
|
-
constructor(project: TestProject, options: PlaywrightProviderOptions);
|
|
50
|
-
private openBrowser;
|
|
51
|
-
private createMocker;
|
|
52
|
-
private createContext;
|
|
53
|
-
getPage(sessionId: string): Page;
|
|
54
|
-
getCommandsContext(sessionId: string): {
|
|
55
|
-
page: Page;
|
|
56
|
-
context: BrowserContext;
|
|
57
|
-
frame: () => Promise<Frame>;
|
|
58
|
-
readonly iframe: FrameLocator;
|
|
59
|
-
};
|
|
60
|
-
private openBrowserPage;
|
|
61
|
-
openPage(sessionId: string, url: string, beforeNavigate?: () => Promise<void>): Promise<void>;
|
|
62
|
-
private _throwIfClosing;
|
|
63
|
-
getCDPSession(sessionid: string): Promise<CDPSession>;
|
|
64
|
-
close(): Promise<void>;
|
|
65
|
-
}
|
|
66
|
-
declare module "vitest/node" {
|
|
67
|
-
interface BrowserCommandContext {
|
|
68
|
-
page: Page;
|
|
69
|
-
frame(): Promise<Frame>;
|
|
70
|
-
iframe: FrameLocator;
|
|
71
|
-
context: BrowserContext;
|
|
72
|
-
}
|
|
73
|
-
interface ToMatchScreenshotOptions extends Omit<ScreenshotMatcherOptions, "comparatorName" | "comparatorOptions"> {}
|
|
74
|
-
interface ToMatchScreenshotComparators extends ScreenshotComparatorRegistry {}
|
|
75
|
-
}
|
|
76
|
-
type PWHoverOptions = NonNullable<Parameters<Page["hover"]>[1]>;
|
|
77
|
-
type PWClickOptions = NonNullable<Parameters<Page["click"]>[1]>;
|
|
78
|
-
type PWDoubleClickOptions = NonNullable<Parameters<Page["dblclick"]>[1]>;
|
|
79
|
-
type PWFillOptions = NonNullable<Parameters<Page["fill"]>[2]>;
|
|
80
|
-
type PWScreenshotOptions = NonNullable<Parameters<Page["screenshot"]>[0]>;
|
|
81
|
-
type PWSelectOptions = NonNullable<Parameters<Page["selectOption"]>[2]>;
|
|
82
|
-
type PWDragAndDropOptions = NonNullable<Parameters<Page["dragAndDrop"]>[2]>;
|
|
83
|
-
type PWSetInputFiles = NonNullable<Parameters<Page["setInputFiles"]>[2]>;
|
|
84
|
-
declare module "@vitest/browser/context" {
|
|
85
|
-
interface UserEventHoverOptions extends PWHoverOptions {}
|
|
86
|
-
interface UserEventClickOptions extends PWClickOptions {}
|
|
87
|
-
interface UserEventDoubleClickOptions extends PWDoubleClickOptions {}
|
|
88
|
-
interface UserEventTripleClickOptions extends PWClickOptions {}
|
|
89
|
-
interface UserEventFillOptions extends PWFillOptions {}
|
|
90
|
-
interface UserEventSelectOptions extends PWSelectOptions {}
|
|
91
|
-
interface UserEventDragAndDropOptions extends PWDragAndDropOptions {}
|
|
92
|
-
interface UserEventUploadOptions extends PWSetInputFiles {}
|
|
93
|
-
interface ScreenshotOptions extends Omit<PWScreenshotOptions, "mask"> {
|
|
94
|
-
mask?: ReadonlyArray<Element | Locator> | undefined;
|
|
95
|
-
}
|
|
96
|
-
interface CDPSession {
|
|
97
|
-
send<T extends keyof Protocol.CommandParameters>(method: T, params?: Protocol.CommandParameters[T]): Promise<Protocol.CommandReturnValues[T]>;
|
|
98
|
-
on<T extends keyof Protocol.Events>(event: T, listener: (payload: Protocol.Events[T]) => void): this;
|
|
99
|
-
once<T extends keyof Protocol.Events>(event: T, listener: (payload: Protocol.Events[T]) => void): this;
|
|
100
|
-
off<T extends keyof Protocol.Events>(event: T, listener: (payload: Protocol.Events[T]) => void): this;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export { PlaywrightBrowserProvider, playwright };
|
|
105
|
-
export type { PlaywrightProviderOptions };
|