In a personal project I have a few functional tests that cover most used features from an end user perspective.
I’m not a big fan of having important packages pinned for compatibility reasons and as soon as I got a bit of free time I decided to replace
Chrome and update
Selenium to the latest version.
There are basically two ways of doing it, starting
Chrome directly in headless mode and setting the driver to use it, or you can just use it along with ChromeDriver, in both cases you should have
Chrome installed. I prefer the latter.
A lot of posts show that you should set the absolute path to the
chromedriver file while setting the
driver in your could. But you can skip that by just placing the file somewhere in your search path, like
Chrome required just a few extra lines in my test
setUp, it went from this:
self.browser = webdriver.PhantomJS()
chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('headless') chrome_options.add_argument('window-size=1920x1080') self.browser = webdriver.Chrome(options=chrome_options)
The additional code is responsible for adding the
window-size arguments when instancing the browser.
And that’s pretty much all the changes required in my code.
A small change in my Travis CI configuration file,
.travis.yml, was also required. Instead of downloading
PhantomJS it should now download the
ChromeDriver file and place it somewhere in the search path.
Just replaced this:
install: - sudo curl --output /usr/local/bin/phantomjs https://s3.amazonaws.com/circle-downloads/phantomjs-2.1.1
install: - sudo curl --output /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/2.35/chromedriver_linux64.zip - sudo unzip /tmp/chromedriver.zip -d /usr/local/bin/
I know I could have done this in a single step, but I prefer this way.
Oh, if you are new to
Selenium don’t forget to close the browser in you
tearDown phase. ;)