I never considered myself as web frontend developer, cause I usually prefer doing more system stuff, but time over time I do it, and sometimes I have to target old browsers, and so I have to test using these browsers. While there are services like SauceLabs and BrowserStack which offer you cloud backed web browser testing, often testing and debugging using these services are slow. They are fine as quality gate used in CI, but using them continuously slow downs development. Running tests and debugging in browser locally is much faster.
So let’s start with Firefox, cause it’s the easiest case. All Firefox releases
are published in a archive. But just installing every single
version that you need to support isn’t going to work for you on Linux (at least
for me). Cause all these versions of browsers using same paths for storing
user profile data. You obviously can try to separate them by using different
environment variables for profiles and other settings. Also, you probably would
have to disable remote interface via
-no-remote CLI option, which
disables listening socket that accepts commands. This used as way to speed up
browser launching, since browser stays loaded even when you close all pages and
when you click to open something it receives remote command. But since we
are going to run multiple versions they would bind to same socket which would
cause a conflict. There is also number of other issues as well.
So, is there is any better way ? Yeah, let’s use lightweight containers for
this. I often use
bwrap aka bubblewrap for these kind of
issues. Here’s for example my launcher for Firefox 38:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
This should be pretty self-explanatory, but I’ll comment on few details.
$HOME is mounted as tmpfs, so when
bwrap process dies, it will be unmounted
and all data that were stored this folder disappears, which is exactly what I
wanted for testing. Also, as you can see this isn’t fully isolated container,
it shares all system folder with you system, mostly in read only mode, so it
takes just a minimal amount of disk space.
With Chrome things get little bit harder, cause there is no official release
archive for it. But you should keep remember that Chrome is based on Chromium
which is open-source and has public CI with results of a build.
But usually you can easily find a super new experimental builds, not an old
outdated builds. Luckily someone made a tool that could
simplify that. Basically it helps you find correct git commit for particular
release of interest and build artifacts. In addition, someone generated list of
artifacts for large amount of different versions. And there is
another website with simpler UI, where you can get links to official
build artifacts, but it has much less of them. And with Chromium you can use
same trick with
bwrap (in some cases you might require using
Now what about testing in IE 11 and Microsoft Edge ? It’s been surprising for me to discover that Microsoft actually has testing VMs on their website that intended exactly for this purpose absolutely for free. These VMs will expire after 90 days, but you can make snapshot, and use them as long as you want. Moreover, these VMs could be used also for application testing as well, for example you could compile app on a Linux via mingw and test generated executable in these VMs.
Now we left with only one major browser left, Safari. So what about it ? Unfortunately I don’t know any way to run it under Linux, so your only available options is use physical device (Apple device) or use some remote service like macincloud. Well, strictly speaking you can still run it in VM under Linux (but shh, I did told you that).