Python Testing - PhantomJS with Selenium WebDriver
Join the DZone community and get the full member experience.
Join For FreePhantomJS is a headless WebKit with JavaScript API. It can be used for headless website testing.
PhantomJS has a lot of different uses. The interesting bit for me is to use PhantomJS as a lighter-weight replacement for a browser when running web acceptance tests. This enables faster testing, without a display or the overhead of full-browser startup/shutdown.
I write my web automation using Selenium WebDriver, in Python.
In future versions of PhantomJS, the GhostDriver component will be included.
GhostDriver is a pure JavaScript implementation of the WebDriver Wire Protocol for PhantomJS. It's a Remote WebDriver that uses PhantomJS as back-end.
So, Ghostdriver is the bridge we need to use Selenium WebDriver with Phantom.JS.
Since it is not available in the current PhantomJS release, you can try it yourself by compiling a special version of PhantomJS:
It wes pretty trvial to setup on Ubuntu (12.04):
$ sudo apt-get install build-essential chrpath git-core libssl-dev libfontconfig1-dev $ git clone git://github.com/ariya/phantomjs.git $ cd phantomjs $ git checkout 1.8 $ ./build.sh $ git remote add detro https://github.com/detro/phantomjs.git $ git fetch detro && git checkout -b detro-ghostdriver-dev remotes/detro/ghostdriver-dev $ ./build.sh
Then grab the `phantomjs` binary it produced (look inside `phantomjs/bin`). This is a self-contained executable, it can be moved to a different directory or another machine. Make sure it is located somewhere on your PATH, or declare it's location when creating your PhantomJS driver like the example below.
for these examples, `phantomjs` binary is located in same directory as test script.
Example: Python Using PhantomJS and Selenium WebDriver.
#!/usr/bin/env python driver = webdriver.PhantomJS('./phantomjs') # do webdriver stuff here driver.quit()
Example: Python Unit Test Using PhantomJS and Selenium WebDriver.
#!/usr/bin/env python import unittest from selenium import webdriver class TestUbuntuHomepage(unittest.TestCase): def setUp(self): self.driver = webdriver.PhantomJS('./phantomjs') def testTitle(self): self.driver.get('http://www.ubuntu.com/') self.assertIn('Ubuntu', self.driver.title) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
resources:
Published at DZone with permission of Corey Goldberg, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments