@vitest/browser 2.2.0-beta.1 → 3.0.0-beta.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.
@@ -23,8 +23,8 @@
23
23
  })();
24
24
  </script>
25
25
  <!-- !LOAD_METADATA! -->
26
- <script type="module" src="./assets/index-DWjHzG4O.js"></script>
27
- <link rel="stylesheet" href="./assets/index-CGSAdLIf.css">
26
+ <script type="module" src="./assets/index-DgyW9gjj.js"></script>
27
+ <link rel="stylesheet" href="./assets/index-DYFkX02J.css">
28
28
  </head>
29
29
  <body>
30
30
  <div id="app"></div>
@@ -11726,8 +11726,9 @@ function mockObject(options, object, mockExports = {}) {
11726
11726
  if (isFunction22) {
11727
11727
  const original = this[key];
11728
11728
  const mock2 = spyOn(this, key).mockImplementation(original);
11729
- mock2.mockRestore = () => {
11730
- mock2.mockReset();
11729
+ const origMockReset = mock2.mockReset;
11730
+ mock2.mockRestore = mock2.mockReset = () => {
11731
+ origMockReset.call(mock2);
11731
11732
  mock2.mockImplementation(original);
11732
11733
  return mock2;
11733
11734
  };
@@ -11744,8 +11745,9 @@ function mockObject(options, object, mockExports = {}) {
11744
11745
  const mock = spyOn(newContainer, property);
11745
11746
  if (options.type === "automock") {
11746
11747
  mock.mockImplementation(mockFunction2);
11747
- mock.mockRestore = () => {
11748
- mock.mockReset();
11748
+ const origMockReset = mock.mockReset;
11749
+ mock.mockRestore = mock.mockReset = () => {
11750
+ origMockReset.call(mock);
11749
11751
  mock.mockImplementation(mockFunction2);
11750
11752
  return mock;
11751
11753
  };
@@ -5,7 +5,7 @@
5
5
  <link rel="icon" href="{__VITEST_FAVICON__}" type="image/svg+xml">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Vitest Browser Tester</title>
8
- <script type="module" crossorigin src="/__vitest_browser__/tester-BaiNqOPw.js"></script>
8
+ <script type="module" crossorigin src="/__vitest_browser__/tester-D_NUSQO8.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
10
10
  </head>
11
11
  <body>
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from 'vitest/config';
2
- import { CDPSession, BrowserServerState as BrowserServerState$1, BrowserServerStateContext, BrowserServer as BrowserServer$1, WorkspaceProject, Vite, BrowserProvider, BrowserScript, Vitest, ProcessPool } from 'vitest/node';
2
+ import { CDPSession, BrowserServerState as BrowserServerState$1, BrowserServerStateContext, BrowserServer as BrowserServer$1, TestProject, Vite, BrowserProvider, BrowserScript, Vitest, ProcessPool } from 'vitest/node';
3
3
  import * as vitest from 'vitest';
4
4
  import { RunnerTestFile, TaskResultPack, AfterSuiteRunMeta, CancelReason, UserConsoleLog, SnapshotResult, SerializedConfig, ErrorWithDiff } from 'vitest';
5
5
  import { HtmlTagDescriptor } from 'vite';
@@ -90,7 +90,7 @@ declare class BrowserServerState implements BrowserServerState$1 {
90
90
  }
91
91
 
92
92
  declare class BrowserServer implements BrowserServer$1 {
93
- project: WorkspaceProject;
93
+ project: TestProject;
94
94
  base: string;
95
95
  faviconUrl: string;
96
96
  prefixTesterUrl: string;
@@ -108,7 +108,7 @@ declare class BrowserServer implements BrowserServer$1 {
108
108
  provider: BrowserProvider;
109
109
  vite: Vite.ViteDevServer;
110
110
  private stackTraceOptions;
111
- constructor(project: WorkspaceProject, base: string);
111
+ constructor(project: TestProject, base: string);
112
112
  setServer(server: Vite.ViteDevServer): void;
113
113
  getSerializableConfig(): SerializedConfig;
114
114
  resolveTesterUrl(pathname: string): {
@@ -128,6 +128,6 @@ declare const distRoot: string;
128
128
 
129
129
  declare function createBrowserPool(ctx: Vitest): ProcessPool;
130
130
 
131
- declare function createBrowserServer(project: WorkspaceProject, configFile: string | undefined, prePlugins?: Plugin[], postPlugins?: Plugin[]): Promise<BrowserServer>;
131
+ declare function createBrowserServer(project: TestProject, configFile: string | undefined, prePlugins?: Plugin[], postPlugins?: Plugin[]): Promise<BrowserServer>;
132
132
 
133
133
  export { BrowserServer, createBrowserPool, createBrowserServer, distRoot };
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import MagicString from 'magic-string';
8
8
  import sirv from 'sirv';
9
9
  import { coverageConfigDefaults } from 'vitest/config';
10
10
  import { fileURLToPath } from 'node:url';
11
- import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-Cv9wga63.js';
11
+ import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-JzwxG3Ek.js';
12
12
  import { resolve as resolve$1, dirname as dirname$1, basename as basename$1, normalize as normalize$1 } from 'node:path';
13
13
  import { mkdir, readFile as readFile$1 } from 'node:fs/promises';
14
14
  import crypto from 'node:crypto';
@@ -16,7 +16,7 @@ import { WebSocketServer } from 'ws';
16
16
  import { parseErrorStacktrace, parseStacktrace } from '@vitest/utils/source-map';
17
17
  import * as nodeos from 'node:os';
18
18
 
19
- var version = "2.2.0-beta.1";
19
+ var version = "3.0.0-beta.1";
20
20
 
21
21
  const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
22
22
  function normalizeWindowsPath(input = "") {
@@ -204,9 +204,7 @@ const clear = async (context, selector) => {
204
204
  if (context.provider instanceof PlaywrightBrowserProvider) {
205
205
  const { iframe } = context;
206
206
  const element = iframe.locator(selector);
207
- await element.clear({
208
- timeout: 1e3
209
- });
207
+ await element.clear();
210
208
  } else if (context.provider instanceof WebdriverBrowserProvider) {
211
209
  const browser = context.browser;
212
210
  const element = await browser.$(selector);
@@ -220,10 +218,7 @@ const click = async (context, selector, options = {}) => {
220
218
  const provider = context.provider;
221
219
  if (provider instanceof PlaywrightBrowserProvider) {
222
220
  const tester = context.iframe;
223
- await tester.locator(selector).click({
224
- timeout: 1e3,
225
- ...options
226
- });
221
+ await tester.locator(selector).click(options);
227
222
  } else if (provider instanceof WebdriverBrowserProvider) {
228
223
  const browser = context.browser;
229
224
  await browser.$(selector).click(options);
@@ -248,7 +243,6 @@ const tripleClick = async (context, selector, options = {}) => {
248
243
  if (provider instanceof PlaywrightBrowserProvider) {
249
244
  const tester = context.iframe;
250
245
  await tester.locator(selector).click({
251
- timeout: 1e3,
252
246
  ...options,
253
247
  clickCount: 3
254
248
  });
@@ -266,10 +260,7 @@ const dragAndDrop = async (context, source, target, options_) => {
266
260
  await frame.dragAndDrop(
267
261
  source,
268
262
  target,
269
- {
270
- timeout: 1e3,
271
- ...options_
272
- }
263
+ options_
273
264
  );
274
265
  } else if (context.provider instanceof WebdriverBrowserProvider) {
275
266
  const $source = context.browser.$(source);
@@ -286,7 +277,7 @@ const fill = async (context, selector, text, options = {}) => {
286
277
  if (context.provider instanceof PlaywrightBrowserProvider) {
287
278
  const { iframe } = context;
288
279
  const element = iframe.locator(selector);
289
- await element.fill(text, { timeout: 1e3, ...options });
280
+ await element.fill(text, options);
290
281
  } else if (context.provider instanceof WebdriverBrowserProvider) {
291
282
  const browser = context.browser;
292
283
  await browser.$(selector).setValue(text);
@@ -385,7 +376,7 @@ _Mime_extensionToType = new WeakMap(), _Mime_typeToExtension = new WeakMap(), _M
385
376
  var mime = new Mime(types)._freeze();
386
377
 
387
378
  function assertFileAccess(path, project) {
388
- if (!isFileServingAllowed(path, project.server) && !isFileServingAllowed(path, project.ctx.server)) {
379
+ if (!isFileServingAllowed(path, project.vite) && !isFileServingAllowed(path, project.vitest.server)) {
389
380
  throw new Error(
390
381
  `Access denied to "${path}". See Vite config documentation for "server.fs": https://vitejs.dev/config/server-options.html#server-fs-strict.`
391
382
  );
@@ -426,10 +417,7 @@ const _fileInfo = async ({ project, testPath = process.cwd() }, path, encoding)
426
417
 
427
418
  const hover = async (context, selector, options = {}) => {
428
419
  if (context.provider instanceof PlaywrightBrowserProvider) {
429
- await context.iframe.locator(selector).hover({
430
- timeout: 1e3,
431
- ...options
432
- });
420
+ await context.iframe.locator(selector).hover(options);
433
421
  } else if (context.provider instanceof WebdriverBrowserProvider) {
434
422
  const browser = context.browser;
435
423
  await browser.$(selector).moveTo(options);
@@ -935,7 +923,6 @@ const screenshot = async (context, name, options = {}) => {
935
923
  const { element: selector, ...config } = options;
936
924
  const element = context.iframe.locator(`${selector}`);
937
925
  const buffer2 = await element.screenshot({
938
- timeout: 1e3,
939
926
  ...config,
940
927
  path: savePath
941
928
  });
@@ -997,10 +984,7 @@ const selectOptions = async (context, selector, userValues, options = {}) => {
997
984
  }
998
985
  return elementHandler;
999
986
  }));
1000
- await selectElement.selectOption(values, {
1001
- timeout: 1e3,
1002
- ...options
1003
- });
987
+ await selectElement.selectOption(values, options);
1004
988
  } else if (context.provider instanceof WebdriverBrowserProvider) {
1005
989
  const values = userValues;
1006
990
  if (!values.length) {
@@ -2493,13 +2477,13 @@ class BrowserServer {
2493
2477
  const browser = this.project.config.browser.name;
2494
2478
  if (!browser) {
2495
2479
  throw new Error(
2496
- `[${this.project.getName()}] Browser name is required. Please, set \`test.browser.name\` option manually.`
2480
+ `[${this.project.name}] Browser name is required. Please, set \`test.browser.name\` option manually.`
2497
2481
  );
2498
2482
  }
2499
2483
  const supportedBrowsers = this.provider.getSupportedBrowsers();
2500
2484
  if (supportedBrowsers.length && !supportedBrowsers.includes(browser)) {
2501
2485
  throw new Error(
2502
- `[${this.project.getName()}] Browser "${browser}" is not supported by the browser provider "${this.provider.name}". Supported browsers: ${supportedBrowsers.join(", ")}.`
2486
+ `[${this.project.name}] Browser "${browser}" is not supported by the browser provider "${this.provider.name}". Supported browsers: ${supportedBrowsers.join(", ")}.`
2503
2487
  );
2504
2488
  }
2505
2489
  const providerOptions = this.project.config.browser.providerOptions;
@@ -2578,7 +2562,7 @@ function createBrowserPool(ctx) {
2578
2562
  const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0];
2579
2563
  if (!origin) {
2580
2564
  throw new Error(
2581
- `Can't find browser origin URL for project "${project.getName()}" when running tests for files "${files.join('", "')}"`
2565
+ `Can't find browser origin URL for project "${project.name}" when running tests for files "${files.join('", "')}"`
2582
2566
  );
2583
2567
  }
2584
2568
  async function setBreakpoint(contextId, file) {
@@ -2603,7 +2587,7 @@ function createBrowserPool(ctx) {
2603
2587
  }
2604
2588
  debug?.(
2605
2589
  `[%s] Running %s tests in %s chunks (%s threads)`,
2606
- project.getName() || "core",
2590
+ project.name || "core",
2607
2591
  files.length,
2608
2592
  chunks.length,
2609
2593
  threadsCount
@@ -2644,9 +2628,9 @@ function createBrowserPool(ctx) {
2644
2628
  };
2645
2629
  const runWorkspaceTests = async (method, specs) => {
2646
2630
  const groupedFiles = /* @__PURE__ */ new Map();
2647
- for (const [project, file] of specs) {
2631
+ for (const { project, moduleId } of specs) {
2648
2632
  const files = groupedFiles.get(project) || [];
2649
- files.push(file);
2633
+ files.push(moduleId);
2650
2634
  groupedFiles.set(project, files);
2651
2635
  }
2652
2636
  let isCancelled = false;
@@ -2657,7 +2641,7 @@ function createBrowserPool(ctx) {
2657
2641
  if (isCancelled) {
2658
2642
  break;
2659
2643
  }
2660
- await project.initBrowserProvider();
2644
+ await project._initBrowserProvider();
2661
2645
  await executeTests(method, project, files);
2662
2646
  }
2663
2647
  };
package/dist/providers.js CHANGED
@@ -1,4 +1,4 @@
1
- import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-Cv9wga63.js';
1
+ import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-JzwxG3Ek.js';
2
2
 
3
3
  class PreviewBrowserProvider {
4
4
  name = "preview";
@@ -4,7 +4,7 @@ class PlaywrightBrowserProvider {
4
4
  supportsParallelism = true;
5
5
  browser = null;
6
6
  browserName;
7
- ctx;
7
+ project;
8
8
  options;
9
9
  contexts = /* @__PURE__ */ new Map();
10
10
  pages = /* @__PURE__ */ new Map();
@@ -13,7 +13,7 @@ class PlaywrightBrowserProvider {
13
13
  return playwrightBrowsers;
14
14
  }
15
15
  initialize(project, { browser, options }) {
16
- this.ctx = project;
16
+ this.project = project;
17
17
  this.browserName = browser;
18
18
  this.options = options;
19
19
  }
@@ -25,21 +25,21 @@ class PlaywrightBrowserProvider {
25
25
  return this.browser;
26
26
  }
27
27
  this.browserPromise = (async () => {
28
- const options = this.ctx.config.browser;
28
+ const options = this.project.config.browser;
29
29
  const playwright = await import('playwright');
30
30
  const launchOptions = {
31
31
  ...this.options?.launch,
32
32
  headless: options.headless
33
33
  };
34
- if (this.ctx.config.inspector.enabled) {
35
- const port = this.ctx.config.inspector.port || 9229;
36
- const host = this.ctx.config.inspector.host || "127.0.0.1";
34
+ if (this.project.config.inspector.enabled) {
35
+ const port = this.project.config.inspector.port || 9229;
36
+ const host = this.project.config.inspector.host || "127.0.0.1";
37
37
  launchOptions.args ||= [];
38
38
  launchOptions.args.push(`--remote-debugging-port=${port}`);
39
39
  launchOptions.args.push(`--remote-debugging-address=${host}`);
40
- this.ctx.logger.log(`Debugger listening on ws://${host}:${port}`);
40
+ this.project.logger.log(`Debugger listening on ws://${host}:${port}`);
41
41
  }
42
- if (this.ctx.config.browser.ui && this.browserName === "chromium") {
42
+ if (this.project.config.browser.ui && this.browserName === "chromium") {
43
43
  if (!launchOptions.args) {
44
44
  launchOptions.args = [];
45
45
  }
@@ -59,15 +59,19 @@ class PlaywrightBrowserProvider {
59
59
  return this.contexts.get(contextId);
60
60
  }
61
61
  const browser = await this.openBrowser();
62
+ const { actionTimeout, ...contextOptions } = this.options?.context ?? {};
62
63
  const options = {
63
- ...this.options?.context,
64
+ ...contextOptions,
64
65
  ignoreHTTPSErrors: true,
65
66
  serviceWorkers: "allow"
66
67
  };
67
- if (this.ctx.config.browser.ui) {
68
+ if (this.project.config.browser.ui) {
68
69
  options.viewport = null;
69
70
  }
70
71
  const context = await browser.newContext(options);
72
+ if (actionTimeout) {
73
+ context.setDefaultTimeout(actionTimeout);
74
+ }
71
75
  this.contexts.set(contextId, context);
72
76
  return context;
73
77
  }
@@ -130,7 +134,7 @@ class PlaywrightBrowserProvider {
130
134
  async openPage(contextId, url, beforeNavigate) {
131
135
  const browserPage = await this.openBrowserPage(contextId);
132
136
  await beforeNavigate?.();
133
- await browserPage.goto(url);
137
+ await browserPage.goto(url, { timeout: 0 });
134
138
  }
135
139
  async getCDPSession(contextId) {
136
140
  const page = this.getPage(contextId);
@@ -168,13 +172,13 @@ class WebdriverBrowserProvider {
168
172
  supportsParallelism = false;
169
173
  browser = null;
170
174
  browserName;
171
- ctx;
175
+ project;
172
176
  options;
173
177
  getSupportedBrowsers() {
174
178
  return webdriverBrowsers;
175
179
  }
176
180
  async initialize(ctx, { browser, options }) {
177
- this.ctx = ctx;
181
+ this.project = ctx;
178
182
  this.browserName = browser;
179
183
  this.options = options;
180
184
  }
@@ -198,7 +202,7 @@ class WebdriverBrowserProvider {
198
202
  if (this.browser) {
199
203
  return this.browser;
200
204
  }
201
- const options = this.ctx.config.browser;
205
+ const options = this.project.config.browser;
202
206
  if (this.browserName === "safari") {
203
207
  if (options.headless) {
204
208
  throw new Error(
@@ -224,7 +228,7 @@ class WebdriverBrowserProvider {
224
228
  firefox: ["moz:firefoxOptions", ["-headless"]],
225
229
  edge: ["ms:edgeOptions", ["--headless"]]
226
230
  };
227
- const options = this.ctx.config.browser;
231
+ const options = this.project.config.browser;
228
232
  const browser = this.browserName;
229
233
  if (browser !== "safari" && options.headless) {
230
234
  const [key, args] = headlessMap[browser];
package/matchers.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import type { Locator } from '@vitest/browser/context'
2
2
  import type jsdomMatchers from './jest-dom.js'
3
- import type { Assertion } from 'vitest'
3
+ import type { Assertion, ExpectPollOptions } from 'vitest'
4
4
 
5
5
  declare module 'vitest' {
6
6
  interface JestAssertion<T = any> extends jsdomMatchers.default.TestingLibraryMatchers<void, T> {}
7
+ interface AsymmetricMatchersContaining extends jsdomMatchers.default.TestingLibraryMatchers<void, void> {}
7
8
 
8
9
  type Promisify<O> = {
9
10
  [K in keyof O]: O[K] extends (...args: infer A) => infer R
@@ -16,6 +17,10 @@ declare module 'vitest' {
16
17
  type PromisifyDomAssertion<T> = Promisify<Assertion<T>>
17
18
 
18
19
  interface ExpectStatic {
20
+ /**
21
+ * `expect.element(locator)` is a shorthand for `expect.poll(() => locator.element())`.
22
+ * You can set default timeout via `expect.poll.timeout` config.
23
+ */
19
24
  element: <T extends Element | Locator>(element: T, options?: ExpectPollOptions) => PromisifyDomAssertion<Awaited<Element | null>>
20
25
  }
21
26
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/browser",
3
3
  "type": "module",
4
- "version": "2.2.0-beta.1",
4
+ "version": "3.0.0-beta.1",
5
5
  "description": "Browser running for Vitest",
6
6
  "license": "MIT",
7
7
  "funding": "https://opencollective.com/vitest",
@@ -32,13 +32,16 @@
32
32
  "default": "./dist/client.js"
33
33
  },
34
34
  "./matchers": {
35
- "types": "./matchers.d.ts"
35
+ "types": "./matchers.d.ts",
36
+ "default": "./dummy.js"
36
37
  },
37
38
  "./providers/webdriverio": {
38
- "types": "./providers/webdriverio.d.ts"
39
+ "types": "./providers/webdriverio.d.ts",
40
+ "default": "./dummy.js"
39
41
  },
40
42
  "./providers/playwright": {
41
- "types": "./providers/playwright.d.ts"
43
+ "types": "./providers/playwright.d.ts",
44
+ "default": "./dummy.js"
42
45
  },
43
46
  "./locator": {
44
47
  "types": "./dist/locators/index.d.ts",
@@ -62,7 +65,7 @@
62
65
  "peerDependencies": {
63
66
  "playwright": "*",
64
67
  "webdriverio": "*",
65
- "vitest": "2.2.0-beta.1"
68
+ "vitest": "3.0.0-beta.1"
66
69
  },
67
70
  "peerDependenciesMeta": {
68
71
  "playwright": {
@@ -78,32 +81,32 @@
78
81
  "dependencies": {
79
82
  "@testing-library/dom": "^10.4.0",
80
83
  "@testing-library/user-event": "^14.5.2",
81
- "magic-string": "^0.30.12",
82
- "msw": "^2.6.4",
84
+ "magic-string": "^0.30.14",
85
+ "msw": "^2.6.6",
83
86
  "sirv": "^3.0.0",
84
87
  "tinyrainbow": "^1.2.0",
85
88
  "ws": "^8.18.0",
86
- "@vitest/mocker": "2.2.0-beta.1",
87
- "@vitest/utils": "2.2.0-beta.1"
89
+ "@vitest/mocker": "3.0.0-beta.1",
90
+ "@vitest/utils": "3.0.0-beta.1"
88
91
  },
89
92
  "devDependencies": {
90
93
  "@testing-library/jest-dom": "^6.6.3",
91
94
  "@types/ws": "^8.5.13",
92
95
  "@wdio/protocols": "^8.40.3",
93
96
  "birpc": "0.2.19",
94
- "flatted": "^3.3.1",
97
+ "flatted": "^3.3.2",
95
98
  "ivya": "^1.1.1",
96
99
  "mime": "^4.0.4",
97
100
  "pathe": "^1.1.2",
98
101
  "periscopic": "^4.0.2",
99
- "playwright": "^1.48.2",
100
- "playwright-core": "^1.48.2",
101
- "safaridriver": "^0.1.2",
102
+ "playwright": "^1.49.0",
103
+ "playwright-core": "^1.49.0",
104
+ "safaridriver": "^1.0.0",
102
105
  "webdriverio": "^8.40.6",
103
- "@vitest/runner": "2.2.0-beta.1",
104
- "@vitest/ui": "2.2.0-beta.1",
105
- "@vitest/ws-client": "2.2.0-beta.1",
106
- "vitest": "2.2.0-beta.1"
106
+ "@vitest/ui": "3.0.0-beta.1",
107
+ "@vitest/runner": "3.0.0-beta.1",
108
+ "@vitest/ws-client": "3.0.0-beta.1",
109
+ "vitest": "3.0.0-beta.1"
107
110
  },
108
111
  "scripts": {
109
112
  "build": "rimraf dist && pnpm build:node && pnpm build:client",
@@ -16,7 +16,13 @@ declare module 'vitest/node' {
16
16
  context?: Omit<
17
17
  BrowserContextOptions,
18
18
  'ignoreHTTPSErrors' | 'serviceWorkers'
19
- >
19
+ > & {
20
+ /**
21
+ * The maximum time in milliseconds to wait for `userEvent` action to complete.
22
+ * @default 0 (no timeout)
23
+ */
24
+ actionTimeout?: number
25
+ }
20
26
  }
21
27
 
22
28
  export interface BrowserCommandContext {
@@ -27,13 +33,13 @@ declare module 'vitest/node' {
27
33
  }
28
34
  }
29
35
 
30
- type PWHoverOptions = Parameters<Page['hover']>[1]
31
- type PWClickOptions = Parameters<Page['click']>[1]
32
- type PWDoubleClickOptions = Parameters<Page['dblclick']>[1]
33
- type PWFillOptions = Parameters<Page['fill']>[2]
34
- type PWScreenshotOptions = Parameters<Page['screenshot']>[0]
35
- type PWSelectOptions = Parameters<Page['selectOption']>[2]
36
- type PWDragAndDropOptions = Parameters<Page['dragAndDrop']>[2]
36
+ type PWHoverOptions = NonNullable<Parameters<Page['hover']>[1]>
37
+ type PWClickOptions = NonNullable<Parameters<Page['click']>[1]>
38
+ type PWDoubleClickOptions = NonNullable<Parameters<Page['dblclick']>[1]>
39
+ type PWFillOptions = NonNullable<Parameters<Page['fill']>[2]>
40
+ type PWScreenshotOptions = NonNullable<Parameters<Page['screenshot']>[0]>
41
+ type PWSelectOptions = NonNullable<Parameters<Page['selectOption']>[2]>
42
+ type PWDragAndDropOptions = NonNullable<Parameters<Page['dragAndDrop']>[2]>
37
43
 
38
44
  declare module '@vitest/browser/context' {
39
45
  export interface UserEventHoverOptions extends PWHoverOptions {}