Skip to content

Commit b1949c9

Browse files
authored
fix(browser): support webdriverio 9 (#7553)
1 parent 365ffe6 commit b1949c9

File tree

6 files changed

+357
-458
lines changed

6 files changed

+357
-458
lines changed

Diff for: packages/browser/package.json

+5-3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"*.d.ts",
6161
"context.js",
6262
"dist",
63+
"dummy.js",
6364
"providers"
6465
],
6566
"scripts": {
@@ -73,7 +74,7 @@
7374
"peerDependencies": {
7475
"playwright": "*",
7576
"vitest": "workspace:*",
76-
"webdriverio": "*"
77+
"webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0"
7778
},
7879
"peerDependenciesMeta": {
7980
"playwright": {
@@ -103,7 +104,8 @@
103104
"@vitest/runner": "workspace:*",
104105
"@vitest/ui": "workspace:*",
105106
"@vitest/ws-client": "workspace:*",
106-
"@wdio/protocols": "^8.40.3",
107+
"@wdio/protocols": "^9.7.0",
108+
"@wdio/types": "^9.9.0",
107109
"birpc": "0.2.19",
108110
"flatted": "^3.3.3",
109111
"ivya": "^1.1.1",
@@ -114,6 +116,6 @@
114116
"playwright-core": "^1.50.1",
115117
"safaridriver": "^1.0.0",
116118
"vitest": "workspace:*",
117-
"webdriverio": "^8.42.0"
119+
"webdriverio": "^9.10.0"
118120
}
119121
}

Diff for: packages/browser/providers/webdriverio.d.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import type { RemoteOptions, ClickOptions, DragAndDropOptions } from 'webdriverio'
1+
import type { remote, ClickOptions, DragAndDropOptions } from 'webdriverio'
22
import '../matchers.js'
33
import type {} from "vitest/node"
44

55
declare module 'vitest/node' {
6-
export interface BrowserProviderOptions extends Partial<RemoteOptions> {}
6+
export interface BrowserProviderOptions extends Partial<
7+
Parameters<typeof remote>[0]
8+
> {}
79

810
export interface UserEventClickOptions extends ClickOptions {}
911

Diff for: packages/browser/src/client/tester/logger.ts

+7
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ export function setupConsoleLogSpy(): void {
9595
function stdout(base: (...args: unknown[]) => void) {
9696
return (...args: unknown[]) => {
9797
base(...args)
98+
// ignore shadow root logs from wdio
99+
// https://github.com/webdriverio/webdriverio/discussions/14221
100+
if (args[0] === '[WDIO]') {
101+
if (args[1] === 'newShadowRoot' || args[1] === 'removeShadowRoot') {
102+
return
103+
}
104+
}
98105
sendLog('stdout', processLog(args))
99106
}
100107
}

Diff for: packages/browser/src/node/providers/webdriver.ts

+22-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import type { Capabilities } from '@wdio/types'
12
import type {
23
BrowserProvider,
34
BrowserProviderInitializationOptions,
45
TestProject,
56
} from 'vitest/node'
6-
import type { RemoteOptions } from 'webdriverio'
77

88
const webdriverBrowsers = ['firefox', 'chrome', 'edge', 'safari'] as const
99
type WebdriverBrowser = (typeof webdriverBrowsers)[number]
@@ -22,7 +22,7 @@ export class WebdriverBrowserProvider implements BrowserProvider {
2222
private browserName!: WebdriverBrowser
2323
private project!: TestProject
2424

25-
private options?: RemoteOptions
25+
private options?: Capabilities.WebdriverIOConfig
2626

2727
getSupportedBrowsers(): readonly string[] {
2828
return webdriverBrowsers
@@ -34,20 +34,32 @@ export class WebdriverBrowserProvider implements BrowserProvider {
3434
): Promise<void> {
3535
this.project = ctx
3636
this.browserName = browser
37-
this.options = options as RemoteOptions
37+
this.options = options as Capabilities.WebdriverIOConfig
3838
}
3939

4040
async switchToTestFrame(): Promise<void> {
4141
const page = this.browser!
42-
const iframe = await page.findElement(
43-
'css selector',
44-
'iframe[data-vitest]',
45-
)
46-
await page.switchToFrame(iframe)
42+
// support wdio@9
43+
if (page.switchFrame) {
44+
await page.switchFrame(page.$('iframe[data-vitest]'))
45+
}
46+
else {
47+
const iframe = await page.findElement(
48+
'css selector',
49+
'iframe[data-vitest]',
50+
)
51+
await page.switchToFrame(iframe)
52+
}
4753
}
4854

4955
async switchToMainFrame(): Promise<void> {
50-
await this.browser!.switchToParentFrame()
56+
const page = this.browser!
57+
if (page.switchFrame) {
58+
await page.switchFrame(null)
59+
}
60+
else {
61+
await page.switchToParentFrame()
62+
}
5163
}
5264

5365
getCommandsContext(): {
@@ -86,7 +98,7 @@ export class WebdriverBrowserProvider implements BrowserProvider {
8698
}
8799

88100
private buildCapabilities() {
89-
const capabilities: RemoteOptions['capabilities'] = {
101+
const capabilities: Capabilities.WebdriverIOConfig['capabilities'] = {
90102
...this.options?.capabilities,
91103
browserName: this.browserName,
92104
}

0 commit comments

Comments
 (0)