@vitest/browser 3.2.0-beta.1 → 3.2.0-beta.3
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 +23 -2
- package/context.js +1 -0
- package/dist/client/.vite/manifest.json +2 -2
- package/dist/client/__vitest__/assets/index-C03hLyIS.js +52 -0
- package/dist/client/__vitest__/assets/{index-DJfrXR3P.css → index-CVSF215x.css} +1 -1
- package/dist/client/__vitest__/index.html +2 -2
- package/dist/client/__vitest_browser__/{orchestrator-CuTjqoE1.js → orchestrator-Bsc_nLaw.js} +6 -2
- package/dist/client/__vitest_browser__/{tester-D-yxPeOx.js → tester-BV-CSJ5v.js} +7 -3
- package/dist/client/orchestrator.html +1 -1
- package/dist/client/tester/tester.html +1 -1
- package/dist/client.js +5 -0
- package/dist/context.js +48 -2
- package/dist/expect-element.js +1 -1
- package/dist/{index-C3ICQ6zz.js → index-D0pxULUR.js} +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +125 -23
- package/dist/locators/index.d.ts +1 -0
- package/dist/locators/index.js +1 -1
- package/dist/locators/playwright.js +1 -1
- package/dist/locators/preview.js +1 -1
- package/dist/locators/webdriverio.js +1 -1
- package/dist/providers.js +2 -1
- package/dist/{public-utils-DUr23h1p.js → public-utils-DJ-T0CfF.js} +1 -1
- package/dist/state.js +3 -0
- package/dist/utils.js +1 -1
- package/dist/{webdriver-D7k26Na7.js → webdriver-B1QbgqhC.js} +52 -13
- package/package.json +12 -12
- package/utils.d.ts +1 -1
- package/dist/client/__vitest__/assets/index-BZjudRZr.js +0 -52
package/dist/context.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { getElementLocatorSelectors } from '@vitest/browser/utils';
|
|
2
|
+
|
|
1
3
|
function ensureAwaited(promise) {
|
|
2
4
|
const test = getWorkerState().current;
|
|
3
5
|
if (!test || test.type !== "test") {
|
|
@@ -13,6 +15,7 @@ function ensureAwaited(promise) {
|
|
|
13
15
|
throw error;
|
|
14
16
|
}
|
|
15
17
|
});
|
|
18
|
+
// don't even start the promise if it's not awaited to not cause any unhanded promise rejections
|
|
16
19
|
let promiseResult;
|
|
17
20
|
return {
|
|
18
21
|
then(onFulfilled, onRejected) {
|
|
@@ -30,10 +33,12 @@ function ensureAwaited(promise) {
|
|
|
30
33
|
}
|
|
31
34
|
/* @__NO_SIDE_EFFECTS__ */
|
|
32
35
|
function getBrowserState() {
|
|
36
|
+
// @ts-expect-error not typed global
|
|
33
37
|
return window.__vitest_browser_runner__;
|
|
34
38
|
}
|
|
35
39
|
/* @__NO_SIDE_EFFECTS__ */
|
|
36
40
|
function getWorkerState() {
|
|
41
|
+
// @ts-expect-error not typed global
|
|
37
42
|
const state = window.__vitest_worker__;
|
|
38
43
|
if (!state) {
|
|
39
44
|
throw new Error("Worker state is not found. This is an issue with Vitest. Please, open an issue.");
|
|
@@ -53,14 +58,19 @@ function escapeIdForCSSSelector(id) {
|
|
|
53
58
|
return id.split("").map((char) => {
|
|
54
59
|
const code = char.charCodeAt(0);
|
|
55
60
|
if (char === " " || char === "#" || char === "." || char === ":" || char === "[" || char === "]" || char === ">" || char === "+" || char === "~" || char === "\\") {
|
|
61
|
+
// Escape common special characters with backslashes
|
|
56
62
|
return `\\${char}`;
|
|
57
63
|
} else if (code >= 65536) {
|
|
64
|
+
// Unicode escape for characters outside the BMP
|
|
58
65
|
return `\\${code.toString(16).toUpperCase().padStart(6, "0")} `;
|
|
59
66
|
} else if (code < 32 || code === 127) {
|
|
67
|
+
// Non-printable ASCII characters (0x00-0x1F and 0x7F) are escaped
|
|
60
68
|
return `\\${code.toString(16).toUpperCase().padStart(2, "0")} `;
|
|
61
69
|
} else if (code >= 128) {
|
|
70
|
+
// Non-ASCII characters (0x80 and above) are escaped
|
|
62
71
|
return `\\${code.toString(16).toUpperCase().padStart(2, "0")} `;
|
|
63
72
|
} else {
|
|
73
|
+
// Allowable characters are used directly
|
|
64
74
|
return char;
|
|
65
75
|
}
|
|
66
76
|
}).join("");
|
|
@@ -69,6 +79,7 @@ function getUniqueCssSelector(el) {
|
|
|
69
79
|
const path = [];
|
|
70
80
|
let parent;
|
|
71
81
|
let hasShadowRoot = false;
|
|
82
|
+
// eslint-disable-next-line no-cond-assign
|
|
72
83
|
while (parent = getParent(el)) {
|
|
73
84
|
if (parent.shadowRoot) {
|
|
74
85
|
hasShadowRoot = true;
|
|
@@ -113,11 +124,13 @@ function processTimeoutOptions(options_) {
|
|
|
113
124
|
if (options_ && options_.timeout != null || provider$1 !== "playwright") {
|
|
114
125
|
return options_;
|
|
115
126
|
}
|
|
127
|
+
// if there is a default action timeout, use it
|
|
116
128
|
if (getWorkerState().config.browser.providerOptions.actionTimeout != null) {
|
|
117
129
|
return options_;
|
|
118
130
|
}
|
|
119
131
|
const runner = getBrowserState().runner;
|
|
120
132
|
const startTime = runner._currentTaskStartTime;
|
|
133
|
+
// ignore timeout if this is called outside of a test
|
|
121
134
|
if (!startTime) {
|
|
122
135
|
return options_;
|
|
123
136
|
}
|
|
@@ -132,10 +145,13 @@ function processTimeoutOptions(options_) {
|
|
|
132
145
|
if (remainingTime <= 0) {
|
|
133
146
|
return options_;
|
|
134
147
|
}
|
|
148
|
+
// give us some time to process the timeout
|
|
135
149
|
options_.timeout = remainingTime - 100;
|
|
136
150
|
return options_;
|
|
137
151
|
}
|
|
138
152
|
|
|
153
|
+
// this file should not import anything directly, only types and utils
|
|
154
|
+
// @ts-expect-error not typed global
|
|
139
155
|
const provider = __vitest_browser_runner__.provider;
|
|
140
156
|
const sessionId = getBrowserState().sessionId;
|
|
141
157
|
const channel = new BroadcastChannel(`vitest:${sessionId}`);
|
|
@@ -147,12 +163,15 @@ function createUserEvent(__tl_user_event_base__, options) {
|
|
|
147
163
|
return createPreviewUserEvent(__tl_user_event_base__, options ?? {});
|
|
148
164
|
}
|
|
149
165
|
const keyboard = { unreleased: [] };
|
|
166
|
+
// https://playwright.dev/docs/api/class-keyboard
|
|
167
|
+
// https://webdriver.io/docs/api/browser/keys/
|
|
150
168
|
const modifier = provider === `playwright` ? "ControlOrMeta" : provider === "webdriverio" ? "Ctrl" : "Control";
|
|
151
169
|
const userEvent = {
|
|
152
170
|
setup() {
|
|
153
171
|
return createUserEvent();
|
|
154
172
|
},
|
|
155
173
|
async cleanup() {
|
|
174
|
+
// avoid cleanup rpc call if there is nothing to cleanup
|
|
156
175
|
if (!keyboard.unreleased.length) {
|
|
157
176
|
return;
|
|
158
177
|
}
|
|
@@ -384,9 +403,12 @@ const page = {
|
|
|
384
403
|
elementLocator() {
|
|
385
404
|
throw new Error(`Method "elementLocator" is not implemented in the "${provider}" provider.`);
|
|
386
405
|
},
|
|
406
|
+
_createLocator() {
|
|
407
|
+
throw new Error(`Method "_createLocator" is not implemented in the "${provider}" provider.`);
|
|
408
|
+
},
|
|
387
409
|
extend(methods) {
|
|
388
410
|
for (const key in methods) {
|
|
389
|
-
page[key] = methods[key];
|
|
411
|
+
page[key] = methods[key].bind(page);
|
|
390
412
|
}
|
|
391
413
|
return page;
|
|
392
414
|
}
|
|
@@ -412,5 +434,29 @@ function convertToSelector(elementOrLocator) {
|
|
|
412
434
|
function getTaskFullName(task) {
|
|
413
435
|
return task.suite ? `${getTaskFullName(task.suite)} ${task.name}` : task.name;
|
|
414
436
|
}
|
|
437
|
+
const locators = {
|
|
438
|
+
createElementLocators: getElementLocatorSelectors,
|
|
439
|
+
extend(methods) {
|
|
440
|
+
const Locator = page._createLocator("css=body").constructor;
|
|
441
|
+
for (const method in methods) {
|
|
442
|
+
const cb = methods[method];
|
|
443
|
+
// @ts-expect-error types are hard to make work
|
|
444
|
+
Locator.prototype[method] = function(...args) {
|
|
445
|
+
const selectorOrLocator = cb.call(this, ...args);
|
|
446
|
+
if (typeof selectorOrLocator === "string") {
|
|
447
|
+
return this.locator(selectorOrLocator);
|
|
448
|
+
}
|
|
449
|
+
return selectorOrLocator;
|
|
450
|
+
};
|
|
451
|
+
page[method] = function(...args) {
|
|
452
|
+
const selectorOrLocator = cb.call(this, ...args);
|
|
453
|
+
if (typeof selectorOrLocator === "string") {
|
|
454
|
+
return page._createLocator(selectorOrLocator);
|
|
455
|
+
}
|
|
456
|
+
return selectorOrLocator;
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
};
|
|
415
461
|
|
|
416
|
-
export { cdp, createUserEvent, page };
|
|
462
|
+
export { cdp, createUserEvent, locators, page };
|
package/dist/expect-element.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{expect,chai}from"vitest";import{k as kAriaCheckedRoles,i as getAriaChecked,j as getAriaRole,l as getAriaDisabled,m as beginAriaCaches,n as endAriaCaches,o as isElementVisible$1,p as getElementAccessibleDescription,q as getElementAccessibleErrorMessage,r as getElementAccessibleName,s as cssEscape}from"./public-utils-
|
|
1
|
+
import{expect,chai}from"vitest";import{k as kAriaCheckedRoles,i as getAriaChecked,j as getAriaRole,l as getAriaDisabled,m as beginAriaCaches,n as endAriaCaches,o as isElementVisible$1,p as getElementAccessibleDescription,q as getElementAccessibleErrorMessage,r as getElementAccessibleName,s as cssEscape}from"./public-utils-DJ-T0CfF.js";import{L as Locator,p as processTimeoutOptions}from"./index-D0pxULUR.js";import{server}from"@vitest/browser/context";import"vitest/internal/browser";function getAriaCheckedRoles(){return[...kAriaCheckedRoles]}function getElementFromUserInput(_,K,q){if(_ instanceof Locator&&(_=_.element()),_ instanceof HTMLElement||_ instanceof SVGElement)return _;throw new UserInputElementTypeError(_,K,q)}function getNodeFromUserInput(_,K,q){if(_ instanceof Locator&&(_=_.element()),_ instanceof Node)return _;throw new UserInputNodeTypeError(_,K,q)}function getMessage(_,K,q,J,Y,X){return[`${K}\n`,`${q}:\n${_.utils.EXPECTED_COLOR(redent(display(_,J),2))}`,`${Y}:\n${_.utils.RECEIVED_COLOR(redent(display(_,X),2))}`].join(`
|
|
2
2
|
`)}function redent(_,K){return indentString(stripIndent(_),K)}function indentString(_,K){let q=/^(?!\s*$)/gm;return _.replace(q,` `.repeat(K))}function minIndent(_){let K=_.match(/^[ \t]*(?=\S)/gm);return K?K.reduce((_,K)=>Math.min(_,K.length),1/0):0}function stripIndent(_){let K=minIndent(_);if(K===0)return _;let q=RegExp(`^[ \\t]{${K}}`,`gm`);return _.replace(q,``)}function display(_,K){return typeof K==`string`?K:_.utils.stringify(K)}function toSentence(_,{wordConnector:K=`, `,lastWordConnector:q=` and `}={}){return[_.slice(0,-1).join(K),_[_.length-1]].join(_.length>1?q:``)}class GenericTypeError extends Error{constructor(_,K,q,J){super(),Error.captureStackTrace&&Error.captureStackTrace(this,q);let Y=``;try{Y=J.utils.printWithType(`Received`,K,J.utils.printReceived)}catch{}this.message=[J.utils.matcherHint(`${J.isNot?`.not`:``}.${q.name}`,`received`,``),``,`${J.utils.RECEIVED_COLOR(`received`)} value must ${_} or a Locator that returns ${_}.`,Y].join(`
|
|
3
3
|
`)}}class UserInputElementTypeError extends GenericTypeError{constructor(_,K,q){super(`an HTMLElement or an SVGElement`,_,K,q)}}class UserInputNodeTypeError extends GenericTypeError{constructor(_,K,q){super(`a Node`,_,K,q)}}function getTag(_){return _ instanceof HTMLFormElement?`FORM`:_.tagName.toUpperCase()}function isInputElement(_){return getTag(_)===`INPUT`}function getSingleElementValue(_){if(_)switch(getTag(_)){case`INPUT`:return getInputValue(_);case`SELECT`:return getSelectValue(_);default:return _.value??getAccessibleValue(_)}}function getSelectValue({multiple:_,options:K}){let q=[...K].filter(_=>_.selected);if(_)return[...q].map(_=>_.value);if(q.length!==0)return q[0].value}function getInputValue(_){switch(_.type){case`number`:return _.value===``?null:Number(_.value);case`checkbox`:return _.checked;default:return _.value}}const rolesSupportingValues=[`meter`,`progressbar`,`slider`,`spinbutton`];function getAccessibleValue(_){if(rolesSupportingValues.includes(_.getAttribute(`role`)||``))return Number(_.getAttribute(`aria-valuenow`))}function normalize(_){return _.replace(/\s+/g,` `).trim()}function matches(_,K){return K instanceof RegExp?K.test(_):_.includes(String(K))}function arrayAsSetComparison(_,K){if(Array.isArray(_)&&Array.isArray(K)){let q=new Set(K);for(let K of new Set(_))if(!q.has(K))return!1;return!0}}const supportedRoles=getAriaCheckedRoles();function toBeChecked(_){let K=getElementFromUserInput(_,toBeChecked,this),q=()=>isInputElement(K)&&[`checkbox`,`radio`].includes(K.type),X=()=>supportedRoles.includes(getAriaRole(K)||``)&&[`true`,`false`].includes(K.getAttribute(`aria-checked`)||``);if(!q()&&!X())return{pass:!1,message:()=>`only inputs with type="checkbox" or type="radio" or elements with ${supportedRolesSentence()} and a valid aria-checked attribute can be used with .toBeChecked(). Use .toHaveValue() instead`};let Z=getAriaChecked(K),Q=Z===!0;return{pass:Q,message:()=>{let _=Q?`is`:`is not`;return[this.utils.matcherHint(`${this.isNot?`.not`:``}.toBeChecked`,`element`,``),``,`Received element ${_} checked:`,` ${this.utils.printReceived(K.cloneNode(!1))}`].join(`
|
|
4
4
|
`)}}}function supportedRolesSentence(){return toSentence(supportedRoles.map(_=>`role="${_}"`),{lastWordConnector:` or `})}function toBeEmptyDOMElement(_){let K=getElementFromUserInput(_,toBeEmptyDOMElement,this);return{pass:isEmptyElement(K),message:()=>[this.utils.matcherHint(`${this.isNot?`.not`:``}.toBeEmptyDOMElement`,`element`,``),``,`Received:`,` ${this.utils.printReceived(K.innerHTML)}`].join(`
|
|
@@ -1 +1 @@
|
|
|
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-
|
|
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-DJ-T0CfF.js";function ensureAwaited(e){let b=getWorkerState().current;if(!b||b.type!==`test`)return e();let x=!1,S=Error(`STACK_TRACE_ERROR`);b.onFinished??=[],b.onFinished.push(()=>{if(!x){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=S.stack?.replace(S.message,e.message),e}});let C;return{then(b,w){return x=!0,(C||=e(S)).then(b,w)},catch(b){return(C||=e(S)).catch(b)},finally(b){return(C||=e(S)).finally(b)},[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 b=e.charCodeAt(0);return e===` `||e===`#`||e===`.`||e===`:`||e===`[`||e===`]`||e===`>`||e===`+`||e===`~`||e===`\\`?`\\${e}`:b>=65536?`\\${b.toString(16).toUpperCase().padStart(6,`0`)} `:b<32||b===127||b>=128?`\\${b.toString(16).toUpperCase().padStart(2,`0`)} `:e}).join(``)}function getUniqueCssSelector(e){let b=[],x,S=!1;for(;x=getParent(e);){x.shadowRoot&&(S=!0);let C=e.tagName;if(e.id)b.push(`#${escapeIdForCSSSelector(e.id)}`);else if(!e.nextElementSibling&&!e.previousElementSibling)b.push(C.toLowerCase());else{let S=0,w=0,T=0;for(let b of x.children)S++,b.tagName===C&&w++,b===e&&(T=S);w>1?b.push(`${C.toLowerCase()}:nth-child(${T})`):b.push(C.toLowerCase())}e=x}return`${getBrowserState().provider===`webdriverio`&&S?`>>>`:``}${b.reverse().join(` > `)}`}function getParent(e){let b=e.parentNode;return b instanceof ShadowRoot?b.host:b}const now=Date.now;function processTimeoutOptions(e){if(e&&e.timeout!=null||provider!==`playwright`||getWorkerState().config.browser.providerOptions.actionTimeout!=null)return e;let b=getBrowserState().runner,x=b._currentTaskStartTime;if(!x)return e;let S=b._currentTaskTimeout;if(S===0||S==null||S===1/0)return e;e||={};let C=now(),w=x+S,T=w-C;return T<=0||(e.timeout=T-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 b=e.getAttribute(`data-scale`),x=Number(b);if(Number.isNaN(x))throw TypeError(`Cannot parse scale value from Tester element (${b}). This is a bug in Vitest. Please, open a new issue with reproduction.`);return x}function escapeRegexForSelector(e){return e.unicode||e.unicodeSets?String(e):String(e).replace(/(^|[^\\])(\\\\)*(["'`])/g,`$1$2\\$3`).replace(/>>/g,`\\>\\>`)}function escapeForTextSelector(e,b){return typeof e==`string`?`${JSON.stringify(e)}i`:escapeRegexForSelector(e)}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});class Locator{_parsedSelector;_container;_pwSelector;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,b){return this.triggerCommand(`__vitest_fill`,this.selector,e,b)}async upload(e,b){let x=(Array.isArray(e)?e:[e]).map(async e=>{if(typeof e==`string`)return e;let b=await new Promise((b,x)=>{let S=new FileReader;S.onload=()=>b(S.result),S.onerror=()=>x(Error(`Failed to read file: ${e.name}`)),S.readAsDataURL(e)});return{name:e.name,mimeType:e.type,base64:b}});return this.triggerCommand(`__vitest_upload`,this.selector,await Promise.all(x),b)}dropTo(e,b={}){return this.triggerCommand(`__vitest_dragAndDrop`,this.selector,e.selector,b)}selectOptions(e,b){let x=(Array.isArray(e)?e:[e]).map(e=>{if(typeof e!=`string`){let b=`element`in e?e.selector:selectorEngine.generateSelectorSimple(e);return{element:b}}return e});return this.triggerCommand(`__vitest_selectOptions`,this.selector,x,b)}screenshot(e){return page.screenshot({...e,element:this})}getByRole(e,b){return this.locator(getByRoleSelector(e,b))}getByAltText(e,b){return this.locator(getByAltTextSelector(e,b))}getByLabelText(e,b){return this.locator(getByLabelSelector(e,b))}getByPlaceholder(e,b){return this.locator(getByPlaceholderSelector(e,b))}getByTestId(b){return this.locator(getByTestIdSelector(server.config.browser.locators.testIdAttribute,b))}getByText(e,b){return this.locator(getByTextSelector(e,b))}getByTitle(e,b){return this.locator(getByTitleSelector(e,b))}filter(e){let b=[];if(e?.hasText&&b.push(`internal:has-text=${escapeForTextSelector(e.hasText)}`),e?.hasNotText&&b.push(`internal:has-not-text=${escapeForTextSelector(e.hasNotText)}`),e?.has){let x=e.has;b.push(`internal:has=${JSON.stringify(x._pwSelector||x.selector)}`)}if(e?.hasNot){let x=e.hasNot;b.push(`internal:has-not=${JSON.stringify(x._pwSelector||x.selector)}`)}if(!b.length)throw Error(`Locator.filter expects at least one filter. None provided.`);return this.locator(b.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)}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,...b){let x=getBrowserState().commands;return ensureAwaited(S=>x.triggerCommand(e,b,S))}}export{Locator as L,getBrowserState as a,convertElementToCssSelector as c,getIframeScale as g,processTimeoutOptions as p,selectorEngine as s};
|
package/dist/index.d.ts
CHANGED
|
@@ -52,6 +52,7 @@ interface WebSocketBrowserHandlers {
|
|
|
52
52
|
registerMock: (sessionId: string, mock: MockedModuleSerialized) => void;
|
|
53
53
|
unregisterMock: (sessionId: string, id: string) => void;
|
|
54
54
|
clearMocks: (sessionId: string) => void;
|
|
55
|
+
// cdp
|
|
55
56
|
sendCdpEvent: (sessionId: string, event: string, payload?: Record<string, unknown>) => unknown;
|
|
56
57
|
trackCdpEvent: (sessionId: string, type: "on" | "once" | "off", event: string, listenerId: string) => void;
|
|
57
58
|
}
|
|
@@ -135,6 +136,7 @@ declare class ParentBrowserProject {
|
|
|
135
136
|
children: Set<ProjectBrowser>;
|
|
136
137
|
vitest: Vitest;
|
|
137
138
|
config: ResolvedConfig;
|
|
139
|
+
// cache for non-vite source maps
|
|
138
140
|
private sourceMapCache;
|
|
139
141
|
constructor(project: TestProject, base: string);
|
|
140
142
|
setServer(vite: Vite.ViteDevServer): void;
|