Skip to content

Commit

Permalink
fix: remove unknown capabilities when running local browser
Browse files Browse the repository at this point in the history
  • Loading branch information
KuznetsovRoman committed Dec 25, 2024
1 parent 0a7f786 commit 781ca7b
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/browser/new-browser.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { URLSearchParams } from "url";

import URI from "urijs";
import { isBoolean, assign, isEmpty } from "lodash";
import { isBoolean, assign, isEmpty, set } from "lodash";
import { remote, RemoteOptions } from "webdriverio";

import { Browser, BrowserOpts } from "./browser";
Expand All @@ -10,7 +10,13 @@ import { runGroup } from "./history";
import { warn } from "../utils/logger";
import { getNormalizedBrowserName } from "../utils/browser";
import { getInstance } from "../config/runtime-config";
import { DEVTOOLS_PROTOCOL, WEBDRIVER_PROTOCOL, LOCAL_GRID_URL } from "../constants/config";
import {
DEVTOOLS_PROTOCOL,
WEBDRIVER_PROTOCOL,
LOCAL_GRID_URL,
W3C_CAPABILITIES,
VENDOR_CAPABILITIES,
} from "../constants/config";
import { Config } from "../config";
import { BrowserConfig } from "../config/browser-config";
import { gridUrl as DEFAULT_GRID_URL } from "../config/defaults";
Expand Down Expand Up @@ -254,7 +260,18 @@ export class NewBrowser extends Browser {
capabilities[capabilitySettings.capabilityName]!.binary ||= executablePath;
}

return capabilities;
const filteredCapabilities: WebdriverIO.Capabilities = Object.keys(capabilities)
.filter(capabilityName => {
const isW3CCapability = W3C_CAPABILITIES.includes(capabilityName);
const isVendorSpecificCapability = VENDOR_CAPABILITIES[browserNameW3C].includes(capabilityName);

return isW3CCapability || isVendorSpecificCapability;
})
.reduce((acc, capabilityName) => {
return set(acc, [capabilityName], capabilities[capabilityName as keyof WebdriverIO.Capabilities]);
}, {});

return filteredCapabilities;
}

protected _getGridHost(url: URI): string {
Expand Down
28 changes: 28 additions & 0 deletions src/constants/config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { BrowserName, type W3CBrowserName } from "../browser/types";

export const WEBDRIVER_PROTOCOL = "webdriver";
export const DEVTOOLS_PROTOCOL = "devtools";
export const SAVE_HISTORY_MODE = {
Expand All @@ -8,3 +10,29 @@ export const SAVE_HISTORY_MODE = {
export const NODEJS_TEST_RUN_ENV = "nodejs";
export const BROWSER_TEST_RUN_ENV = "browser";
export const LOCAL_GRID_URL = "local";

// https://www.w3.org/TR/webdriver/#capabilities
export const W3C_CAPABILITIES = [
"browserName",
"browserVersion",
"platformName",
"acceptInsecureCerts",
"pageLoadStrategy",
"proxy",
"setWindowRect",
"timeouts",
"strictFileInteractability",
"unhandledPromptBehavior",
"userAgent",
];

export const VENDOR_CAPABILITIES: Record<W3CBrowserName, string[]> = {
// https://developer.chrome.com/docs/chromedriver/capabilities
[BrowserName.CHROME]: ["goog:chromeOptions", "perfLoggingPrefs"],
// https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
[BrowserName.FIREFOX]: ["moz:firefoxOptions"],
// https://learn.microsoft.com/en-us/microsoft-edge/webdriver-chromium/capabilities-edge-options
[BrowserName.EDGE]: ["ms:edgeOptions"],
// https://developer.apple.com/documentation/webkit/about-webdriver-for-safari
[BrowserName.SAFARI]: ["safari:automaticInspection", "safari:automaticProfiling", "useTechnologyPreview"],
};
31 changes: 31 additions & 0 deletions test/src/browser/new-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,37 @@ describe("NewBrowser", () => {
},
});
});

it("should remove unknown capabilities", async () => {
installBrowserStub.withArgs("chrome", "115.0").resolves("/browser/path/chrome/115.0");
RuntimeConfig.getInstance.returns({ local: true });
const wdPool = mkWdPool_({ gridUrl: "http://localhost:23456/" });
const browser = mkBrowser_(
{
gridUrl: "http://localhost:4444/wd/hub",
automationProtocol: "webdriver",
desiredCapabilities: {
browserName: "chrome",
browserVersion: "115.0",
"selenoid:options": { baz: "qux" },
"moz:firefoxOptions": {},
perfLoggingPrefs: { foo: "bar" },
},
},
{ wdPool },
);

await browser.init();

assert.deepEqual(webdriverio.remote.lastCall.args[0].capabilities, {
browserName: "chrome",
browserVersion: "115.0",
"goog:chromeOptions": {
binary: "/browser/path/chrome/115.0",
},
perfLoggingPrefs: { foo: "bar" },
});
});
});
});

Expand Down

0 comments on commit 781ca7b

Please sign in to comment.