Setup Linux testing environment on Windows using WSL

Why this post?

If you are one of those testers that had been using a Windows machine and have had to setup a Linux system for running your Selenium automation test, this post is for you. I had to setup a Linux system for running the automation tests for one of our clients. The framework the client had been using, used a UNIX command to find the test files in the various subdirectories under the project root. This prevented us from running the tests on a Windows environment.
I am writing this post to share the steps I followed to setup a Linux environment on my Windows machine to run the Selenium tests. Hopefully, this will help other testers who face a similar issue.

Windows Subsystem for Linux(WSL):

WSL is a cool feature on Windows 10 that allows you to run most of the GNU/Linux commands and applications on Windows.
Here are the steps on how to setup WSL on Windows –
You can pick any distribution of Linux for WSL, I chose Ubuntu for my project. The steps I am about to suggest should work regardless of the Linux distribution you are planning to use.

Access Windows files from WSL:

Now that you have WSL setup, you can start accessing Windows files from WSL. The Windows file system is mounted on the mount point – /mnt on WSL. To see the contents of a file foo.txt in C: drive, you can use – cat /mnt/c/foo.txt from WSL. The .exe files on Windows can be run from WSL too. To open Chrome browser on Windows run – /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe.

Link Windows’s Chrome and chromedriver to WSL:

To run a basic Selenium UI test on any environment you would need a browser and a driver to control the browser, in our case all we have to do is, make Windows’s Chrome browser and the chromedriver accessible from WSL, through symlinks.
Run the following commands on WSL to create symlinks:

  1. ln -s '/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe' /usr/bin/google-chrome, this would create a file as google-chrome in /usr/bin and link it to the Chrome browser on Windows.
  2. ln -s /mnt/c/Users/username/node_modules/chromedriver/lib/chromedriver/chromedriver.exe /usr/bin/chromedriver, this would create a file a chromedriver in /usr/bin and link it to the chromedriver on Windows.

Note: The location of Chrome browser and chromedriver will be different on your system. Check and substitute the right paths when using above commands. Also in some cases you may need to run as a root user for this to work.

How it works:

When driver = webdriver.Chrome() is run from a script or Python interpreter on WSL, it searches for chromedriver binary in system path, it will locate the chromedriver we added with the above command and then will try to open google-chrome binary in the system path, again it will use google-chrome we added. WSL will start accessing the chromedriver and google-chrome from Windows as if they are present on its own filesystem and start running the test steps on the browser.

There you go, you now have a Linux testing environment inside you Windows machine. Have fun testing!

Shivahari P

I help engineer high quality software. I started out as a manual tester at Cognizant Technology Solutions where I worked on a healthcare project. I quit  CTS due to personal reasons and decided to try freelancing as a trainer. I mentored aspiring engineers on employability skills for a while. I liked exploring applications as a hobby and was always on the lookout for better testing jobs that had a better balance of exploratory testing, scripted testing and automation. I joined Qxf2 in 2015. I was introduced to Python, my first programming language, at Qxf2. Over the years I have had the opportunity to learn JavaScript and Shell scripting(can I even call it a language?) and a little bit of C. Python is my favourite, I am amazed by its simplicity and support for libraries. I like  to: watch  football – I support Arsenal Football Club, play football and read books

Be First to Comment

Leave a Reply

Your email address will not be published.