Within the Angular organization, we use Chrome and Firefox to perform most of the local testing, and rely on Sauce Labs and BrowserStack to do cross-browser testing on our CI.
The version of Chrome used in tests within this monorepo is configured and controlled via Bazel and puppeteer
.
We manually keep the configuration of these two tools in sync to create a consistent testing environment across unit, e2e, and integration tests.
Bazel karma_web_test_suite
and protractor_web_test_suite
targets will use Chromium or Firefox provisioned by //dev-infra/browsers
.
The version of Chrome and Firefox are specified in the chromium.bzl
and firefox.bzl
files in /dev-infra/browsers
.
The process of updating the Chrome or Firefox version is not straightforward, but below are dedicated sections for each browser.
-
Visit https://chromium.woolyss.com/ and note the version (commit position) of the latest stable version.
For example, "Google Chrome 83.0.4103.97 (756066) • Wednesday, 3 Jun 2020". Alternatively, you can look in https://omahaproxy.appspot.com/.
-
Find the closest commit position number available for each platform in chromium-browser-snapshots: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html
For example:
- https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/756066/
- https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Mac/756053/
- https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/756065/
You can download Chromium for your local platform and double check that the
--version
matches up with what you expect.For example:
$ ~/Downloads/chrome-mac/Chromium.app/Contents/MacOS/Chromium --version Chromium 83.0.4103.0
-
Update the chrome & chrome driver build numbers in
dev-infra/browsers/chromium/chromium.bzl
and either runbazel query @org_chromium_chromium_amd64//...
to prompt Bazel to calculate the newsha256
for each platform binary or determine the newsha256
values manually.Here is an example with
curl
&shasum
:curl -L https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/756066/chrome-linux.zip | shasum -a 256
-
Visit https://github.com/puppeteer/puppeteer/blob/master/docs/api.md to determine which version of puppeteer corresponds to the version of Chrome desired.
-
Visit https://chromedriver.chromium.org/downloads to determine which version of ChromeDriver should be used for the version of Chrome desired.
NOTE: The version of Chrome does not necessarily correspond exactly with the version of ChromeDriver. For example, you might have to use ChromeDriver v87.0.4280.x to drive Chrome v87.0.4272.x.
-
Update
scripts/puppeteer-chromedriver-versions.js
to include and entry with the new version of puppeteer as key and the new version of ChromeDriver as value (as determined in the two previous steps). -
Update all of the puppeteer versions throughout the repo:
package.json
aio/package.json
aio/tools/examples/shared/package.json
...and their corresponding
yarn.lock
files.
In order to update Firefox, open the dev-infra/browsers/firefox/firefox.bzl
file and update the repository URLs to the desired version.
For example:
platform_http_file(
name = "org_mozilla_firefox_amd64",
licenses = ["reciprocal"], # MPL 2.0
sha256 = "bde6e020556a21561e4b8d7aaecf8db7077951f179b98ca5d0305435bc6802c9",
# Firefox v78.0
urls = ["https://ftp.mozilla.org/pub/firefox/releases/78.0/linux-x86_64/en-US/firefox-78.0.tar.bz2"],
)
-
Go to the
urls
property and update the URL by replacing all78.0
occurrences with the version you intend to use. Once done, do the same change for other platforms (such asmacos
). -
Update the
sha256
checksum of the browser archives. You can do this by downloading the artifacts from the URLs you just updated, and then runningshasum
on those files:curl -L <BROWSER_URL> | shasum -a 256
In the same file, you can also update the version of gecko driver (the WebDriver implementation for Firefox browsers).
-
Go to https://firefox-source-docs.mozilla.org/testing/geckodriver/Support.html and find a version that is compatible with the used version of Firefox.
-
Update the
geckodriver
repository URLs to the desired version:platform_http_file( name = "org_mozilla_geckodriver_amd64", licenses = ["reciprocal"], # MPL 2.0 sha256 = "d59ca434d8e41ec1e30dd7707b0c95171dd6d16056fb6db9c978449ad8b93cc0", # Geckodriver v0.26.0 urls = ["https://github.com/mozilla/geckodriver/releases/download/v0.26.0/geckodriver-v0.26.0-linux64.tar.gz"], )
For example, replace all occurrences of
0.26.0
with the newer version. -
Update the
sha256
checksum of the driver archives. You can do this by downloading the artifacts from the URLs you just updated, and then runningshasum
on those files:curl -L <DRIVER_URL> | shasum -a 256