@eyeo/get-browser-binary 0.5.0 → 0.7.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/src/utils.js CHANGED
@@ -22,7 +22,6 @@ import {promisify} from "util";
22
22
  import {exec} from "child_process";
23
23
 
24
24
  import got from "got";
25
- import fsExtra from "fs-extra";
26
25
  import dmg from "dmg";
27
26
 
28
27
  /**
@@ -66,7 +65,7 @@ export async function extractDmg(archive, dir) {
66
65
  let source = path.join(mpath, target);
67
66
  await fs.promises.mkdir(dir);
68
67
  try {
69
- await fsExtra.copy(source, path.join(dir, target));
68
+ await fs.promises.cp(source, path.join(dir, target), {recursive: true});
70
69
  }
71
70
  finally {
72
71
  try {
@@ -78,11 +77,6 @@ export async function extractDmg(archive, dir) {
78
77
  }
79
78
  }
80
79
 
81
- export async function getBrowserVersion(driver) {
82
- let version = (await driver.getCapabilities()).getBrowserVersion();
83
- return version ? parseInt(version.split(".")[0], 10) : null;
84
- }
85
-
86
80
  // Useful to unlock the driver file before replacing it or executing it
87
81
  export async function killDriverProcess(driverName) {
88
82
  let cmd = `kill $(pgrep ${driverName})`;
package/test/browsers.js CHANGED
@@ -21,19 +21,17 @@ import path from "path";
21
21
 
22
22
  import {BROWSERS, snapshotsBaseDir} from "../index.js";
23
23
  import {killDriverProcess} from "../src/utils.js";
24
+ import Jimp from "jimp";
24
25
 
25
- // Required to set the driver path on Windows
26
- import "chromedriver";
27
- import "geckodriver";
26
+ import "geckodriver"; // Required to set the driver path on Windows
28
27
 
29
28
  const VERSIONS = {
30
29
  chromium: ["latest", "75.0.3770.0", "beta", "dev"],
31
30
  firefox: ["latest", "60.0", "beta"],
32
- edge: ["latest", "95.0.1020.53", "beta", "dev"],
33
- opera: ["latest", "62.0.3331.66"]
31
+ edge: ["latest", "95.0.1020.40", "beta", "dev"]
34
32
  };
35
33
  const TEST_URL = "https://gitlab.com/eyeo/developer-experience/get-browser-binary";
36
- let extensionPaths = [path.resolve(process.cwd(), "test", "extension")];
34
+ const TEST_URL_LONG_PAGE = "https://abptestpages.org/";
37
35
 
38
36
  async function switchToHandle(driver, testFn) {
39
37
  for (let handle of await driver.getAllWindowHandles()) {
@@ -45,7 +43,6 @@ async function switchToHandle(driver, testFn) {
45
43
  catch (e) {
46
44
  continue;
47
45
  }
48
-
49
46
  if (testFn(url))
50
47
  return handle;
51
48
  }
@@ -91,11 +88,28 @@ expect.extend({
91
88
  }
92
89
  });
93
90
 
94
- for (let browser of Object.keys(BROWSERS)) {
95
- describe(`Browser: ${browser}`, function() {
96
- this.timeout(150000);
91
+ function getExtension(browser, version) {
92
+ let manifest = "mv2";
93
+ // The latest Edge installed on the Gitlab Windows Shared Runners is Edge 79,
94
+ // which does not support manifest v3. More info:
95
+ // https://gitlab.com/eyeo/developer-experience/get-browser-binary/-/issues/29
96
+ let windowsSharedRunners =
97
+ browser == "edge" && process.platform == "win32" && process.env.CI_JOB_ID;
98
+ if (["chromium", "edge"].includes(browser) &&
99
+ ["latest", "beta", "dev"].includes(version) && !windowsSharedRunners)
100
+ manifest = "mv3";
101
+
102
+ let extensionPaths =
103
+ [path.resolve(process.cwd(), "test", "extension", manifest)];
104
+ return {extensionPaths, manifest};
105
+ }
97
106
 
107
+ for (let browser of Object.keys(BROWSERS)) {
108
+ describe(`Browser: ${browser}`, () => {
98
109
  before(async() => {
110
+ if (process.env.TEST_KEEP_SNAPSHOTS == "true")
111
+ return;
112
+
99
113
  try {
100
114
  await fs.promises.rm(snapshotsBaseDir, {recursive: true});
101
115
  }
@@ -121,16 +135,13 @@ for (let browser of Object.keys(BROWSERS)) {
121
135
 
122
136
  afterEach(quitDriver);
123
137
 
124
- it("downloads", async function() {
138
+ it("installs", async function() {
125
139
  if (browser == "edge" && process.platform == "win32")
126
140
  this.skip();
127
141
 
128
142
  let {binary, versionNumber} =
129
- await BROWSERS[browser].downloadBinary(version);
130
- let browserName =
131
- browser == "opera" ? /(opera|Opera)/ :
132
- browser == "edge" ? /(edge|Edge)/ :
133
- browser;
143
+ await BROWSERS[browser].installBrowser(version);
144
+ let browserName = browser == "edge" ? /(edge|Edge)/ : browser;
134
145
  expect(binary).toEqual(expect.stringMatching(browserName));
135
146
 
136
147
  let installedVersion =
@@ -143,8 +154,7 @@ for (let browser of Object.keys(BROWSERS)) {
143
154
  let names = {
144
155
  chromium: "chrome",
145
156
  firefox: "firefox",
146
- edge: /(MicrosoftEdge|msedge)/,
147
- opera: /(opera|chrome)/
157
+ edge: /(MicrosoftEdge|msedge)/
148
158
  };
149
159
 
150
160
  driver = await BROWSERS[browser].getDriver(version);
@@ -172,8 +182,22 @@ for (let browser of Object.keys(BROWSERS)) {
172
182
  expect(sizeDevToolsOpen).toMeasureLessThan(sizeDevToolsClosed);
173
183
  });
174
184
 
185
+ it("takes a full page screenshot", async() => {
186
+ driver = await BROWSERS[browser].getDriver(version);
187
+ await driver.navigate().to(TEST_URL_LONG_PAGE);
188
+
189
+ let fullImg = await BROWSERS[browser].takeFullPageScreenshot(driver);
190
+ // Taking a regular webdriver screenshot, which should be shorter
191
+ let data = await driver.takeScreenshot();
192
+ let partImg = await Jimp.read(Buffer.from(data, "base64"));
193
+
194
+ expect(fullImg.bitmap.width).toBeGreaterThan(0);
195
+ expect(fullImg.bitmap.height).toBeGreaterThan(partImg.bitmap.height);
196
+ });
197
+
175
198
  it("loads an extension", async() => {
176
199
  let headless = browser == "firefox";
200
+ let {extensionPaths} = getExtension(browser, version);
177
201
 
178
202
  driver = await BROWSERS[browser].getDriver(
179
203
  version, {headless, extensionPaths});
@@ -184,24 +208,25 @@ for (let browser of Object.keys(BROWSERS)) {
184
208
  if (browser == "firefox" && version == "60.0")
185
209
  this.skip();
186
210
 
211
+ let {extensionPaths, manifest} = getExtension(browser, version);
187
212
  driver = await BROWSERS[browser].getDriver(
188
213
  version, {headless: false, extensionPaths, incognito: true});
189
214
  await BROWSERS[browser].enableExtensionInIncognito(
190
- driver, "Browser download test extension"
215
+ driver, `Browser test extension - ${manifest}`
191
216
  );
192
217
  await getHandle(driver, "/index.html");
193
218
  });
194
219
  });
195
220
  }
196
221
 
197
- it("does not download unsupported versions", async function() {
222
+ it("does not install unsupported versions", async function() {
198
223
  if (browser == "edge" && process.platform == "win32")
199
224
  this.skip();
200
225
 
201
- const UNSUPPORTED = "0.0";
202
-
203
- await expect(BROWSERS[browser].downloadBinary(UNSUPPORTED))
204
- .rejects.toThrow(`Unsupported browser version: ${UNSUPPORTED}`);
226
+ for (let unsupported of ["0.0", "invalid"]) {
227
+ await expect(BROWSERS[browser].installBrowser(unsupported))
228
+ .rejects.toThrow(`Unsupported browser version: ${unsupported}`);
229
+ }
205
230
  });
206
231
  });
207
232
  }
@@ -0,0 +1 @@
1
+ <h1>Browser test extension - mv2</h1>
@@ -1,7 +1,6 @@
1
1
  {
2
- "name": "Browser download test extension",
2
+ "name": "Browser test extension - mv2",
3
3
  "version": "0.1",
4
- "description": "Browser download test extension",
5
4
  "manifest_version": 2,
6
5
  "background": {
7
6
  "scripts": ["background.js"]
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ chrome.tabs.create({url: "index.html"});
@@ -0,0 +1 @@
1
+ <h1>Browser test extension - mv3</h1>
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "Browser test extension - mv3",
3
+ "version": "0.1",
4
+ "manifest_version": 3,
5
+ "background": {
6
+ "service_worker": "background.js"
7
+ }
8
+ }
@@ -1 +0,0 @@
1
- <h1>Browser download test extension</h1>