@eyeo/get-browser-binary 0.20.1 → 0.21.0

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/.gitlab-ci.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  default:
2
- image: registry.gitlab.com/eyeo/docker/get-browser-binary:node18
2
+ image: registry.gitlab.com/eyeo/docker/get-browser-binary:node22
3
3
  interruptible: true
4
4
 
5
5
  stages:
@@ -49,29 +49,26 @@ test:browsers:linux:dev:
49
49
  .windows:
50
50
  stage: test
51
51
  before_script:
52
- - choco install -y microsoft-edge
53
52
  - npm install
54
53
  tags:
55
54
  - eyeo-windows
56
55
  cache: {}
57
- # Retrying to mitigate Edge install issues
58
- retry: 1
59
56
 
60
57
  test:browsers:windows:
61
58
  extends: .windows
62
59
  script:
63
60
  # Running Edge tests only on the preinstalled version
64
61
  # https://gitlab.com/eyeo/developer-experience/get-browser-binary/-/issues/29
65
- - npm test -- --grep "edge.*latest"
66
- - npm test -- --grep "^.*chromium((?!Version:.dev).)*$"
62
+ - npm test "--" --grep "edge.*latest"
63
+ - npm test "--" --grep "^.*chromium((?!Version:.dev).)*$"
67
64
  # Running only a subset of Firefox tests to avoid low OS resources error
68
65
  # https://gitlab.com/eyeo/developer-experience/get-browser-binary/-/issues/2
69
- - npm test -- --grep "firefox.*installs"
66
+ - npm test "--" --grep "firefox.*installs"
70
67
 
71
68
  test:browsers:windows:dev:
72
69
  extends: .windows
73
70
  script:
74
- - npm test -- --grep "chromium.*Version:.dev"
71
+ - npm test "--" --grep "chromium.*Version:.dev"
75
72
  allow_failure: true
76
73
 
77
74
  docs:
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 22.14.0
package/RELEASE_NOTES.md CHANGED
@@ -1,8 +1,21 @@
1
1
  # Unreleased
2
2
 
3
+ # 0.21.0
4
+
5
+ - Fixes an issue on Chromedriver (>=136) which stopped returning webdriver
6
+ handles for extension pages (!139)
7
+ - Fixes an issue on Firefox (>=138) when getting the installed version through
8
+ the binary file (#86)
9
+ - Updates the minimum supported version of Node to 22. Node 22 is the current
10
+ LTS version of Node (EXT-778)
11
+
12
+ # 0.20.2
13
+
14
+ - Fixes getting majorVersion on Edge (!133)
15
+
3
16
  # 0.20.1
4
17
 
5
- - test: Fixes enabling developer mode (!131)
18
+ - Fixes enabling developer mode (!131)
6
19
 
7
20
  # 0.20.0
8
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eyeo/get-browser-binary",
3
- "version": "0.20.1",
3
+ "version": "0.21.0",
4
4
  "description": "Install browser binaries and matching webdrivers",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,8 +9,8 @@
9
9
  "author": "eyeo GmbH",
10
10
  "license": "GPL-3.0",
11
11
  "engines": {
12
- "node": ">=18",
13
- "npm": ">=9"
12
+ "node": ">=22",
13
+ "npm": ">=10"
14
14
  },
15
15
  "type": "module",
16
16
  "main": "index.js",
package/src/browser.js CHANGED
@@ -55,6 +55,12 @@ export class Browser {
55
55
  * @throws {Error} Browser is not installed.
56
56
  */
57
57
  static async getInstalledVersion(binary) {
58
+ // Since Firefox v138, calling `[firefox binary] --version` produces an
59
+ // EPERM error on the CI, even though the browser version is returned
60
+ // correctly. Ignoring that error as a workaround.
61
+ const ignoredError =
62
+ "Sandbox: CanCreateUserNamespace() clone() failure: EPERM";
63
+
58
64
  try {
59
65
  let stdout;
60
66
  let stderr;
@@ -67,8 +73,8 @@ export class Browser {
67
73
  else {
68
74
  ({stdout, stderr} = await promisify(execFile)(binary, ["--version"]));
69
75
  }
70
- if (stderr)
71
- throw new Error(stderr);
76
+ if (stderr && !stderr.includes(ignoredError))
77
+ throw new Error(JSON.stringify({stdout, stderr}, null, 2));
72
78
 
73
79
  return stdout.trim();
74
80
  }
package/src/chromium.js CHANGED
@@ -42,6 +42,17 @@ async function enableDeveloperMode(driver) {
42
42
  devModeToggle.click();
43
43
  });
44
44
 
45
+ await driver.wait(async() => {
46
+ const checked = await driver.executeScript(() => {
47
+ const devModeToggle = document
48
+ .querySelector("extensions-manager").shadowRoot
49
+ .getElementById("toolbar").shadowRoot
50
+ .querySelector("#toolbar #devMode");
51
+ return devModeToggle.checked;
52
+ });
53
+ return checked;
54
+ }, 500);
55
+
45
56
  await driver.close();
46
57
  await driver.switchTo().window(currentHandle);
47
58
  }
@@ -225,12 +236,18 @@ export class Chromium extends Browser {
225
236
  await Chromium.#getInstalledBrowserInfo(customBrowserBinary) :
226
237
  await Chromium.installBrowser(version, downloadTimeout);
227
238
 
228
- let options = new chrome.Options().addArguments("no-sandbox", ...extraArgs);
239
+ const majorVersion = getMajorVersion(versionNumber);
240
+ const chromeOptions = {};
241
+ // https://issues.chromium.org/issues/409441960
242
+ if (majorVersion >= 136)
243
+ chromeOptions.enableExtensionTargets = true;
244
+
245
+ const options = new chrome.Options({"goog:chromeOptions": chromeOptions})
246
+ .addArguments("no-sandbox", ...extraArgs);
229
247
  if (extensionPaths.length > 0) {
230
248
  await checkExtensionPaths(extensionPaths);
231
249
  options.addArguments(`load-extension=${extensionPaths.join(",")}`);
232
250
  }
233
- let majorVersion = getMajorVersion(versionNumber);
234
251
  if (headless) {
235
252
  // https://www.selenium.dev/blog/2023/headless-is-going-away/
236
253
  if (majorVersion >= 109)
package/src/edge.js CHANGED
@@ -42,6 +42,14 @@ async function enableDeveloperMode(driver) {
42
42
  devModeToggle.click();
43
43
  });
44
44
 
45
+ await driver.wait(async() => {
46
+ const checked = await driver.executeScript(() => {
47
+ const devModeToggle = document.getElementById("developer-mode");
48
+ return devModeToggle.checked;
49
+ });
50
+ return checked;
51
+ }, 500);
52
+
45
53
  await driver.close();
46
54
  await driver.switchTo().window(currentHandle);
47
55
  }
@@ -214,9 +222,16 @@ export class Edge extends Browser {
214
222
  await Edge.getInstalledVersion(binary);
215
223
  }
216
224
 
217
- let options = new edge.Options().addArguments("no-sandbox", ...extraArgs);
225
+ const majorVersion = getMajorVersion(versionNumber);
226
+ const edgeOptions = {};
227
+ // https://issues.chromium.org/issues/409441960
228
+ if (majorVersion >= 136)
229
+ edgeOptions.enableExtensionTargets = true;
230
+
231
+ const options = new edge.Options({"ms:edgeOptions": edgeOptions})
232
+ .addArguments("no-sandbox", ...extraArgs);
218
233
  if (headless) {
219
- if (versionNumber && getMajorVersion(versionNumber) >= 114)
234
+ if (versionNumber && majorVersion >= 114)
220
235
  options.addArguments("headless=new");
221
236
  else
222
237
  options.addArguments("headless");
@@ -253,7 +268,7 @@ export class Edge extends Browser {
253
268
 
254
269
  // From Edge 134 on, developer mode needs to be enabled
255
270
  // for custom extensions to work properly
256
- if (versionNumber >= 134)
271
+ if (majorVersion >= 134)
257
272
  await enableDeveloperMode(driver);
258
273
 
259
274
  return driver;
@@ -1,4 +1,4 @@
1
- FROM registry.gitlab.com/eyeo/docker/get-browser-binary:node18
1
+ FROM registry.gitlab.com/eyeo/docker/get-browser-binary:node22
2
2
 
3
3
  COPY package*.json get-browser-binary/
4
4
  RUN cd get-browser-binary && npm install