S0-E3/E30 :)

Did you created your selenium grid tests ? Did you know, that you can get them to run faster? Just use PhantomJS! Wait... what? NodeJS technology in Python stack?! YEAH! With docker you can combine them!


PhantomJS is a Javascript Headless browser that at least theoretically should run faster then Firefox.

This article is connected with How-To-Create-Your-Selenium-Grid-Compatible-Test - check it out :)

How to run your PhantomJS

Using docker you can just:

docker run -d -p 8910:8910 wernight/phantomjs phantomjs --webdriver=8910

Your testcase.

And here is what I thought will be a simple integration with Selenium Grid. Then I've found it does not have proper connector to Selenium Grid (eh...). Moreover I've found it has problems with making "send_keys" because of some strange dependency problems that you can find on stackoverflow (problem exists I've check it, before I found those SO pages): - here - here

So what can we do?

Well here's what I've been able to make with a not-fully working python api to remote PhantomJS :

import unittest
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

import time

class PhantomJSTests(unittest.TestCase):
    def test_search_in_python_org(self):
        # this test will not work on PhantomJS since it has a in-compatible API :(
        # instead we need to create a simulation for that
        driver = self.driver
        print driver.get("https://github.com")
        assert "GitHub" in driver.title
        elem = driver.find_element_by_name("q")
        # send_keys does not work on phantomjs - there are some strange workarounds but in my limited time I could not get them to work.
        # I will however make a follow up on this!
        # elem.send_keys("anselmos")
        # time.sleep(5)
        # elem.send_keys(Keys.ENTER)
        # time.sleep(5)
        # assert "No results found." not in driver.page_source

    def setUp(self):
        self.driver = webdriver.Remote(

if __name__ == "__main__":

OR download it from here

Is there any other solutions to this ?

Well.... yeah. You can either recompile PhantomJS (by using different branch named " backport-ghostdriver-2-0-to-phantomjs-2-1 " and then using command docker run -v $PWD:/src debian:wheezy /src/deploy/docker-build.sh as suggested on github issue page in this comment by jesg

Wait until someone will fix PhantomJS (that is apparently untill 2.5 -btw current ver. is 2.1.3 ... )

Or... use a Javascript API instead as described here


That's it :) Comment, share or don't :)

I hope you enjoyed this episode as much as I did :)

BTW I will do a follow up on problems with PhantomJS - and will give you feedback if there are any other solutions to the problem :)

If you have any suggestions what I should blog about in the next articles - please give me a hint :)

See you tomorrow! Cheers!


comments powered by Disqus