@eyeo/get-browser-binary 0.12.0 → 0.13.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/README.md +8 -8
- package/RELEASE_NOTES.md +14 -0
- package/package.json +1 -1
- package/src/browsers.js +43 -23
- package/test/browsers.js +8 -1
- package/test/extension/mv3/manifest.json +2 -1
package/README.md
CHANGED
|
@@ -83,6 +83,14 @@ Increasing the timeout may be useful on slow connection environments:
|
|
|
83
83
|
npm test -- --timeout <ms>
|
|
84
84
|
```
|
|
85
85
|
|
|
86
|
+
By default, tests delete the `./browser-snapshots` before each `Browser` suite
|
|
87
|
+
runs. To change that behavior you may set the `TEST_KEEP_SNAPSHOTS` environment
|
|
88
|
+
variable to `true`. Example:
|
|
89
|
+
|
|
90
|
+
```shell
|
|
91
|
+
TEST_KEEP_SNAPSHOTS=true npm test
|
|
92
|
+
```
|
|
93
|
+
|
|
86
94
|
### Running tests on Docker
|
|
87
95
|
|
|
88
96
|
Useful to reproduce the CI environment of the `test:browsers:linux` job.
|
|
@@ -101,14 +109,6 @@ parameter:
|
|
|
101
109
|
docker run --shm-size=512m -e TEST_ARGS="--grep chromium.*latest --timeout 100000" -it browsers
|
|
102
110
|
```
|
|
103
111
|
|
|
104
|
-
By default, tests delete the `./browser-snapshots` before each `Browser` suite
|
|
105
|
-
runs. To change that behavior you may set the `TEST_KEEP_SNAPSHOTS` environment
|
|
106
|
-
variable to `true`. Example:
|
|
107
|
-
|
|
108
|
-
```shell
|
|
109
|
-
TEST_KEEP_SNAPSHOTS=true npm test
|
|
110
|
-
```
|
|
111
|
-
|
|
112
112
|
#### ARM architecture (M1/M2 Apple Silicon)
|
|
113
113
|
|
|
114
114
|
Chromium (ARM native):
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# 0.13.0
|
|
2
|
+
|
|
3
|
+
- Fixes an issue that prevented the webdriver from locating the Edge binary on
|
|
4
|
+
Linux (#60)
|
|
5
|
+
- Uses headless new mode on Edge >= 116 (!74)
|
|
6
|
+
- Replaces omahaproxy API (deprecated) with chromiumdash (!73)
|
|
7
|
+
- Throws a `browser not installed` error when `customBinaryPath` doesn't exist
|
|
8
|
+
(!72)
|
|
9
|
+
|
|
10
|
+
### Testing
|
|
11
|
+
|
|
12
|
+
- Changes the test extension in incognito mode from spanning to split (#59)
|
|
13
|
+
- Runs Linux Edge tests in a different browser version order (!71)
|
|
14
|
+
|
|
1
15
|
# 0.12.0
|
|
2
16
|
|
|
3
17
|
- Adds a new field `customBrowserBinary` to `getDriver()` options parameter that
|
package/package.json
CHANGED
package/src/browsers.js
CHANGED
|
@@ -102,23 +102,29 @@ class Browser {
|
|
|
102
102
|
* Gets the installed version returned by the browser binary.
|
|
103
103
|
* @param {string} binary The path to the browser binary.
|
|
104
104
|
* @return {string} Installed browser version.
|
|
105
|
+
* @throws {Error} Browser is not installed.
|
|
105
106
|
*/
|
|
106
107
|
static async getInstalledVersion(binary) {
|
|
107
|
-
let stdout;
|
|
108
108
|
try {
|
|
109
|
+
let stdout;
|
|
110
|
+
let stderr;
|
|
109
111
|
if (platform == "win32") {
|
|
110
|
-
({stdout} = await promisify(exec)(
|
|
112
|
+
({stdout, stderr} = await promisify(exec)(
|
|
111
113
|
`(Get-ItemProperty ${binary}).VersionInfo.ProductVersion`,
|
|
112
114
|
{shell: "powershell.exe"})
|
|
113
115
|
);
|
|
114
116
|
}
|
|
115
117
|
else {
|
|
116
|
-
({stdout} = await promisify(execFile)(binary, ["--version"]));
|
|
118
|
+
({stdout, stderr} = await promisify(execFile)(binary, ["--version"]));
|
|
117
119
|
}
|
|
120
|
+
if (stderr)
|
|
121
|
+
throw new Error(stderr);
|
|
122
|
+
|
|
118
123
|
return stdout.trim();
|
|
119
124
|
}
|
|
120
|
-
catch (
|
|
121
|
-
|
|
125
|
+
catch (err) {
|
|
126
|
+
throw new Error(`${BROWSER_NOT_INSTALLED_ERROR}.\nBinary path: ${binary}\n${err}`);
|
|
127
|
+
}
|
|
122
128
|
}
|
|
123
129
|
|
|
124
130
|
/**
|
|
@@ -201,7 +207,8 @@ class Chromium extends Browser {
|
|
|
201
207
|
"darwin-x64": "mac",
|
|
202
208
|
"darwin-arm64": "mac_arm64"
|
|
203
209
|
}[platformArch];
|
|
204
|
-
let url = `https://
|
|
210
|
+
let url = `https://versionhistory.googleapis.com/v1/chrome/platforms/${os}/channels/${channel}/versions/all/releases`;
|
|
211
|
+
|
|
205
212
|
let data;
|
|
206
213
|
try {
|
|
207
214
|
data = await got(url).json();
|
|
@@ -209,13 +216,7 @@ class Chromium extends Browser {
|
|
|
209
216
|
catch (err) {
|
|
210
217
|
throw new Error(`${BROWSER_VERSION_CHECK_ERROR}: ${url}\n${err}`);
|
|
211
218
|
}
|
|
212
|
-
let
|
|
213
|
-
let {current_version: version} = release;
|
|
214
|
-
|
|
215
|
-
if (release.true_branch && release.true_branch.includes("_"))
|
|
216
|
-
// A wrong base may be caused by a mini-branch (patched) release
|
|
217
|
-
// In that case, the base is taken from the unpatched version
|
|
218
|
-
version = [...version.split(".").slice(0, 3), "0"].join(".");
|
|
219
|
+
let {version} = data.releases[0];
|
|
219
220
|
|
|
220
221
|
return version;
|
|
221
222
|
}
|
|
@@ -231,10 +232,18 @@ class Chromium extends Browser {
|
|
|
231
232
|
}
|
|
232
233
|
|
|
233
234
|
static async #getBase(chromiumVersion) {
|
|
234
|
-
let url
|
|
235
|
+
let url;
|
|
235
236
|
let chromiumBase;
|
|
236
237
|
try {
|
|
237
|
-
|
|
238
|
+
// https://gitlab.com/eyeo/developer-experience/get-browser-binary/-/issues/55
|
|
239
|
+
if (getMajorVersion(chromiumVersion) < 91) {
|
|
240
|
+
url = `https://omahaproxy.appspot.com/deps.json?version=${chromiumVersion}`;
|
|
241
|
+
({chromium_base_position: chromiumBase} = await got(url).json());
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
url = `https://chromiumdash.appspot.com/fetch_version?version=${chromiumVersion}`;
|
|
245
|
+
({chromium_main_branch_position: chromiumBase} = await got(url).json());
|
|
246
|
+
}
|
|
238
247
|
}
|
|
239
248
|
catch (err) {
|
|
240
249
|
throw new Error(`${BROWSER_VERSION_CHECK_ERROR}: ${url}\n${err}`);
|
|
@@ -797,9 +806,6 @@ class Edge extends Browser {
|
|
|
797
806
|
|
|
798
807
|
let binaryPath = binary || Edge.#getBinaryPath();
|
|
799
808
|
let versionNumber = await Edge.#getInstalledVersionNumber(binaryPath);
|
|
800
|
-
if (!versionNumber)
|
|
801
|
-
throw new Error(`${BROWSER_NOT_INSTALLED_ERROR}. Binary path: ${binaryPath}`);
|
|
802
|
-
|
|
803
809
|
let [zip, driverBinary] = {
|
|
804
810
|
"win32-ia32": ["edgedriver_win32.zip", "msedgedriver.exe"],
|
|
805
811
|
"win32-x64": ["edgedriver_win64.zip", "msedgedriver.exe"],
|
|
@@ -844,21 +850,35 @@ class Edge extends Browser {
|
|
|
844
850
|
extraArgs = [], customBrowserBinary
|
|
845
851
|
} = {}, downloadTimeout = 0) {
|
|
846
852
|
let binary;
|
|
847
|
-
|
|
848
|
-
|
|
853
|
+
let versionNumber;
|
|
854
|
+
if (!customBrowserBinary && (platform == "linux" || platform == "darwin")) {
|
|
855
|
+
({binary, versionNumber} =
|
|
856
|
+
await Edge.installBrowser(version, downloadTimeout));
|
|
857
|
+
}
|
|
858
|
+
else {
|
|
859
|
+
binary = customBrowserBinary || Edge.#getBinaryPath();
|
|
860
|
+
versionNumber =
|
|
861
|
+
await Edge.#getInstalledVersionNumber(binary);
|
|
862
|
+
}
|
|
849
863
|
|
|
850
|
-
let driverPath = await Edge.#installDriver(
|
|
864
|
+
let driverPath = await Edge.#installDriver(binary);
|
|
851
865
|
let serviceBuilder = new edge.ServiceBuilder(driverPath);
|
|
852
866
|
|
|
853
867
|
let options = new edge.Options().addArguments("no-sandbox", ...extraArgs);
|
|
854
|
-
if (headless)
|
|
855
|
-
|
|
868
|
+
if (headless) {
|
|
869
|
+
if (versionNumber && getMajorVersion(versionNumber) >= 114)
|
|
870
|
+
options.addArguments("headless=new");
|
|
871
|
+
else
|
|
872
|
+
options.headless();
|
|
873
|
+
}
|
|
856
874
|
if (extensionPaths.length > 0)
|
|
857
875
|
options.addArguments(`load-extension=${extensionPaths.join(",")}`);
|
|
858
876
|
if (incognito)
|
|
859
877
|
options.addArguments("inprivate");
|
|
860
878
|
if (insecure)
|
|
861
879
|
options.addArguments("ignore-certificate-errors");
|
|
880
|
+
if (platform == "linux")
|
|
881
|
+
options.setEdgeChromiumBinaryPath(`/usr/bin/${binary}`);
|
|
862
882
|
|
|
863
883
|
let builder = new webdriver.Builder();
|
|
864
884
|
builder.forBrowser("MicrosoftEdge");
|
package/test/browsers.js
CHANGED
|
@@ -28,7 +28,8 @@ import "geckodriver"; // Required to set the driver path on Windows
|
|
|
28
28
|
const VERSIONS = {
|
|
29
29
|
chromium: ["latest", "75.0.3770.0", "beta", "dev"],
|
|
30
30
|
firefox: ["latest", "60.0", "beta"],
|
|
31
|
-
|
|
31
|
+
// Unusual ordering: https://gitlab.com/eyeo/developer-experience/get-browser-binary/-/issues/57
|
|
32
|
+
edge: ["dev", "beta", "latest", "95.0.1020.40"]
|
|
32
33
|
};
|
|
33
34
|
const TEST_URL = "https://abptestpages.org/en/exceptions/iframe_subdomains";
|
|
34
35
|
const TEST_URL_LONG_PAGE = "https://abptestpages.org/";
|
|
@@ -300,5 +301,11 @@ for (let browser of Object.keys(BROWSERS)) {
|
|
|
300
301
|
.rejects.toThrow(`Unsupported browser version: ${unsupported}`);
|
|
301
302
|
}
|
|
302
303
|
});
|
|
304
|
+
|
|
305
|
+
it("does not run not installed custom browsers", async() => {
|
|
306
|
+
let customBrowserBinary = "not-installed";
|
|
307
|
+
await expect(BROWSERS[browser].getDriver("latest", {customBrowserBinary}))
|
|
308
|
+
.rejects.toThrow(/(Browser is not installed|binary is not a Firefox executable)/);
|
|
309
|
+
});
|
|
303
310
|
});
|
|
304
311
|
}
|