@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/.gitlab-ci.yml +6 -7
- package/.mocharc.json +3 -0
- package/README.md +24 -14
- package/RELEASE_NOTES.md +26 -0
- package/package.json +4 -5
- package/src/browsers.js +329 -453
- package/src/utils.js +1 -7
- package/test/browsers.js +49 -24
- package/test/extension/{background.js → mv2/background.js} +0 -0
- package/test/extension/mv2/index.html +1 -0
- package/test/extension/{manifest.json → mv2/manifest.json} +1 -2
- package/test/extension/mv3/background.js +3 -0
- package/test/extension/mv3/index.html +1 -0
- package/test/extension/mv3/manifest.json +8 -0
- package/test/extension/index.html +0 -1
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
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
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("
|
|
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].
|
|
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,
|
|
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
|
|
222
|
+
it("does not install unsupported versions", async function() {
|
|
198
223
|
if (browser == "edge" && process.platform == "win32")
|
|
199
224
|
this.skip();
|
|
200
225
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h1>Browser test extension - mv2</h1>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<h1>Browser test extension - mv3</h1>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<h1>Browser download test extension</h1>
|