Skip to content

Commit d3a585f

Browse files
committed
feat: upgrade WebdriverIO to v9, drop JWP capabilities
1 parent 1a3e861 commit d3a585f

File tree

12 files changed

+3979
-9850
lines changed

12 files changed

+3979
-9850
lines changed

docs/docs/test-runner/browser-launchers/saucelabs.md

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,6 @@ export default {
6868
browserVersion: '11.0',
6969
platformName: 'Windows 7',
7070
}),
71-
72-
sauceLabsLauncher({
73-
browserName: 'iphone',
74-
platform: 'iPhone X Simulator',
75-
version: '13.0',
76-
}),
7771
],
7872
};
7973
```
@@ -141,24 +135,3 @@ export default {
141135
],
142136
};
143137
```
144-
145-
### JWP Capabilities
146-
147-
W3C webdriver capabilities are not yet fully implemented for Sauce Labs simulators. If you need to run the tests on iPhone Simulator, you need to use JWP capabilities.
148-
149-
The following steps are required to use JWP capabilities with Sauce Labs launcher:
150-
151-
- Use `version` instead of `browserVersion`,
152-
- Do not set a `sauce:options` property.
153-
154-
```js
155-
export default {
156-
browsers: [
157-
sauceLabsLauncher({
158-
browserName: 'iphone',
159-
platform: 'iPhone X Simulator',
160-
version: '13.0',
161-
}),
162-
],
163-
};
164-
```

package-lock.json

Lines changed: 3936 additions & 9766 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/test-runner-commands/test/send-mouse/sendMousePlugin.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ describe('sendMousePlugin', function test() {
5757
browsers: [
5858
webdriverLauncher({
5959
automationProtocol: 'webdriver',
60+
hostname: 'localhost',
61+
port: 4444,
6062
path: '/wd/hub/',
6163
capabilities: {
6264
browserName: 'chrome',
@@ -67,6 +69,8 @@ describe('sendMousePlugin', function test() {
6769
}),
6870
webdriverLauncher({
6971
automationProtocol: 'webdriver',
72+
hostname: 'localhost',
73+
port: 4444,
7074
path: '/wd/hub/',
7175
capabilities: {
7276
browserName: 'firefox',

packages/test-runner-saucelabs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
"internal-ip": "^6.2.0",
5151
"nanoid": "^3.1.25",
5252
"saucelabs": "^7.2.0",
53-
"webdriver": "^8.8.6",
54-
"webdriverio": "^8.8.6"
53+
"webdriver": "^9.0.0",
54+
"webdriverio": "^9.0.0"
5555
},
5656
"devDependencies": {
5757
"@types/ip": "^1.1.0",

packages/test-runner-saucelabs/src/SauceLabsLauncher.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestRunnerCoreConfig } from '@web/test-runner-core';
2-
import { RemoteOptions } from 'webdriverio';
2+
import { Capabilities } from '@wdio/types';
33
import { WebdriverLauncher } from '@web/test-runner-webdriver';
44
import internalIp from 'internal-ip';
55
import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.js';
@@ -13,7 +13,7 @@ export class SauceLabsLauncher extends WebdriverLauncher {
1313
constructor(
1414
private manager: SauceLabsLauncherManager,
1515
public name: string,
16-
options: RemoteOptions,
16+
options: Capabilities.WebdriverIOConfig,
1717
) {
1818
super(options);
1919
}

packages/test-runner-saucelabs/src/createSauceLabsLauncher.ts

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
import { BrowserLauncher } from '@web/test-runner-core';
22
import { SauceLabsOptions, SauceConnectOptions } from 'saucelabs';
3-
import WebDriver from 'webdriver';
4-
import { RemoteOptions } from 'webdriverio';
5-
import { Options } from '@wdio/types';
3+
import { Capabilities, Options } from '@wdio/types';
64
import { nanoid } from 'nanoid';
7-
85
import { SauceLabsLauncher } from './SauceLabsLauncher.js';
96
import { SauceLabsLauncherManager } from './SauceLabsLauncherManager.js';
107

118
export function createSauceLabsLauncher(
129
saucelabsOptions: SauceLabsOptions,
13-
saucelabsCapabilities?: WebDriver.DesiredCapabilities,
10+
saucelabsCapabilities?: WebdriverIO.Capabilities,
1411
sauceConnectOptions?: SauceConnectOptions,
1512
) {
1613
if (saucelabsOptions == null) {
@@ -36,51 +33,33 @@ export function createSauceLabsLauncher(
3633
}
3734
const manager = new SauceLabsLauncherManager(finalSauceLabsOptions, finalConnectOptions);
3835

39-
return function sauceLabsLauncher(capabilities: WebDriver.DesiredCapabilities): BrowserLauncher {
36+
return function sauceLabsLauncher(capabilities: WebdriverIO.Capabilities): BrowserLauncher {
4037
if (capabilities == null) {
4138
throw new Error('Capabilities are required.');
4239
}
4340

44-
let finalCapabilities = { ...capabilities };
41+
const finalCapabilities = { ...capabilities };
4542

4643
const finalSauceCapabilities = {
4744
tunnelIdentifier: finalConnectOptions.tunnelIdentifier,
4845
...saucelabsCapabilities,
4946
};
5047

51-
// W3C capabilities: only browserVersion is mandatory, platformName is optional.
52-
// Note that setting 'sauce:options' forces Sauce Labs to use W3C capabilities.
53-
if (capabilities.browserVersion) {
54-
// version is not a valid W3C key.
55-
delete finalCapabilities.version;
56-
57-
// platform is not a valid W3C key and will throw, use platformName instead.
58-
if (capabilities.platform) {
59-
finalCapabilities.platformName =
60-
finalCapabilities.platformName || finalCapabilities.platform;
61-
delete finalCapabilities.platform;
62-
}
63-
64-
finalCapabilities['sauce:options'] = {
65-
...finalSauceCapabilities,
66-
...(finalCapabilities['sauce:options'] || {}),
67-
};
68-
} else {
69-
// JWP capabilities for remote environments not yet supporting W3C.
70-
// This enables running tests on iPhone Simulators in Sauce Labs.
71-
finalCapabilities = { ...finalCapabilities, ...finalSauceCapabilities };
72-
}
48+
finalCapabilities['sauce:options'] = {
49+
...finalSauceCapabilities,
50+
...(finalCapabilities['sauce:options'] || {}),
51+
};
7352

7453
// Type cast to not fail on snake case syntax e.g. browser_version.
7554
const caps = finalCapabilities as Record<string, string>;
7655

77-
const browserName = caps.browserName ?? caps.browser ?? caps.device ?? 'unknown';
78-
const browserVersion = caps.browserVersion ?? caps.version ?? caps.browser_version ?? '';
79-
const platform = caps.platformName ?? caps.platform ?? '';
56+
const browserName = caps.browserName ?? 'unknown';
57+
const browserVersion = caps.browserVersion ?? '';
58+
const platform = caps.platformName ?? '';
8059

8160
const browserIdentifier = `${browserName}${browserVersion}${platform}`;
8261

83-
const options: RemoteOptions = {
62+
const options: Capabilities.WebdriverIOConfig = {
8463
user: finalSauceLabsOptions.user,
8564
key: finalSauceLabsOptions.key,
8665
region: finalSauceLabsOptions.region as Options.SauceRegions,

packages/test-runner-webdriver/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
],
5050
"dependencies": {
5151
"@web/test-runner-core": "^0.13.0",
52-
"webdriverio": "^8.8.6"
52+
"webdriverio": "^9.0.0"
5353
},
5454
"devDependencies": {
5555
"@types/selenium-standalone": "^7.0.1",

packages/test-runner-webdriver/src/IFrameManager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestRunnerCoreConfig } from '@web/test-runner-core';
2-
import { Browser, Element } from 'webdriverio';
2+
import { Browser } from 'webdriverio';
33
import { validateBrowserResult } from './coverage.js';
44

55
/**
@@ -169,9 +169,9 @@ export class IFrameManager {
169169

170170
await this.driver.switchToFrame(frame);
171171

172-
const elementData = (await this.driver.execute(locator, [])) as Element;
172+
const elementData = (await this.driver.execute(locator, [])) as WebdriverIO.Element;
173173

174-
const element = await this.driver.$(elementData);
174+
const element = await this.driver.$(elementData).getElement();
175175

176176
let base64 = '';
177177

packages/test-runner-webdriver/src/SessionManager.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { TestRunnerCoreConfig } from '@web/test-runner-core';
2-
import { Browser, Element } from 'webdriverio';
2+
import { Browser } from 'webdriverio';
33
import { validateBrowserResult } from './coverage.js';
44

55
/**
@@ -89,9 +89,9 @@ export class SessionManager {
8989
}
9090

9191
async takeScreenshot(_: string, locator: string): Promise<Buffer> {
92-
const elementData = (await this.driver.execute(locator, [])) as Element;
92+
const elementData = (await this.driver.execute(locator, [])) as WebdriverIO.Element;
9393

94-
const element = await this.driver.$(elementData);
94+
const element = await this.driver.$(elementData).getElement();
9595

9696
let base64 = '';
9797

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1-
import WebDriver from 'webdriver';
2-
3-
function getPlatform(c: WebDriver.DesiredCapabilities): string | undefined {
4-
return c.platformName || c.platform;
1+
function getPlatform(c: WebdriverIO.Capabilities): string | undefined {
2+
return c.platformName;
53
}
64

7-
export function getBrowserName(c: WebDriver.DesiredCapabilities): string | undefined {
5+
export function getBrowserName(c: WebdriverIO.Capabilities): string | undefined {
86
return c.browserName;
97
}
108

11-
function getBrowserVersion(c: WebDriver.DesiredCapabilities): string | undefined {
12-
return c.browserVersion || c.version;
9+
function getBrowserVersion(c: WebdriverIO.Capabilities): string | undefined {
10+
return c.browserVersion;
1311
}
1412

15-
export function getBrowserLabel(c: WebDriver.DesiredCapabilities): string {
13+
export function getBrowserLabel(c: WebdriverIO.Capabilities): string {
1614
return [getPlatform(c), getBrowserName(c), getBrowserVersion(c)].filter(_ => _).join(' ');
1715
}

0 commit comments

Comments
 (0)