Skip to main content

zope.testing layer that integrates Selenium-RC

Project description

Selenium RC integration with zope.testing

gocept.selenium integrates Selenium RC with your Plone/Zope 2/ZTK/Grok test suite.

Quick start with ZTK

Assuming that you already have a package that uses zc.buildout and zope.testing, you need to do this to enable Selenium tests:

  1. Add gocept.selenium to the list of eggs either in your, or in buildout.cfg, using the extra ztk, i.e. gocept.selenium[ztk].

  2. Install Selenium RC by some means, e.g. by downloading a version from . We do not recommend using the collective.recipe.seleniumrc buildout recipe for this since we have had some bad experiences with it related to new versions of Selenium RC and Firefox.

  1. Run buildout to install gocept.selenium and selenium (the Python bindings for Selenium RC).

  2. Create a layer for your tests, like this:

    import gocept.selenium.ztk
    zcml_layer =
        __name__, __name__, allow_teardown=True)
    selenium_layer = gocept.selenium.ztk.Layer(zcml_layer)

Essentially, the zcml_layer is what you would use for typical ZTK functional tests, and then you wrap it to create selenium_layer.

  1. Start writing tests that inherit gocept.selenium.ztk.TestCase; make sure you set the layer attribute to selenium_layer on each test class.

  2. In your tests, use self.selenium to control Selenium RC, e.g.

    class MyTest(gocept.selenium.ztk.TestCase):
        layer = selenium_layer
        def test(self):
  'http://%s/foo.html' % self.selenium.server)
  3. Run seleniumrc: java -jar /path/to/selenium-server.jar

  4. Run bin/test and see it work!

Quick start with Zope 2/Plone

Essentially the same, only use gocept.selenium.zope2 or gocept.selenium.plone instead of gocept.selenium.ztk.

Quick start with Grok

The layer works a little different than in the ZTK steps above, instead of delegating to a (probably alredy existing functional-testing) layer, you’ll need a separate one for the Selenium tests.

  1. Use the grok extra when requiring gocept.selenium.

  1. Create a layer for your tests:

    import gocept.selenium.grok
    selenium_layer = gocept.selenium.grok.Layer(my.package)
  2. Inherit from gocept.selenium.grok.TestCase. You will probably want to setup your app in your test setup:

    import transaction
    class MyTest(gocept.selenium.grok.TestCase):
        layer = selenium_layer
         def setUp(self):
             super(MyTest, self).setUp()
             root = self.getRootFolder()
             root['app'] = mypackage.App()
         def test(self):

The Grok Layer is based on a WSGI layer. You can test WSGI applications with gocept.selenium by following the steps described above and substituting:

  1. Use the wsgi extra when requiring gocept.selenium.

  1. Create a layer for your tests:

    import gocept.selenium.wsgi
    from mypackage import App
    test_layer = gocept.selenium.wsgi.Layer(App())
  2. Inherit from gocept.selenium.wsgi.TestCase:

    class TestWSGITestCase(gocept.selenium.wsgi.TestCase):
        layer = test_layer

Quick start with plone.testing

  1. Use the plonetesting extra when requiring gocept.selenium.

  1. gocept.selenium provides a plone.testing.Layer, gocept.selenium.plonetesting.SELENIUM that you can mix and match with your other layers, see plonetesting.testing/plonetesting.tests.zope2 and plonetesting.testing_plone/plonetesting.tests.plone{3,4} for some examples of integrating with Zope2 and Plone, respectively.

Controlling gocept.selenium through environment variables

You can configure the selenium server that gocept.selenium connects to from the command line. Selenium RC defaults to localhost:4444, but you can also connect to a selenium grid in your organization by using the following environment variables:

If multiple browsers are connected to your selenium grid, you can choose the browser to run the tests with as such:


When you are running your selenium tests on a selenium grid, you need to instruct the browser which host and port to connect to:


When you are testing an application on one machine, you can access the running application from another machine if you set GOCEPT_SELENIUM_APP_HOST = instead of the default localhost.

You can set the speed with which the tests are run through an environment variable:


This example will introduce a 500 millisecond pause between tests.

Similar packages

zc.selenium – integrates Selenium Core with zope.testing.


Report bugs at <>.

Get the latest source with

svn co gocept.selenium


0.9 (2010-12-28)

  • Provide integration with the recent testlayer approach ( used by Grok (#8260).

  • Provide integration with plone.testing

  • Make browser and RC server configurable (#6484).

  • Show current test case in command log (#7876).

  • Raise readable error when connection to RC server fails (#6489).

  • Quit browser when the testrunner terminates (#6485).

0.8 (2010-10-22)

  • Fixed tests for the StaticFilesLayer to pass with Python 2.4 through 2.7.

  • API expandsion: getSelectOptions

0.7 (2010-08-16)

  • API expansion: getElementHeight|Width, getCookie* and a few others.

  • lots of action methods (mouse* among others)

0.6 (2010-08-09)

  • assertXpathCount now also takes ints (#7681).

  • API expansion: add isChecked to verify checkboxes, runScript, clickAt, getLocation, getSelectedValue, getSelectedIndex.

  • The pause method uses float division now. Pauses where implicitly rounded to full seconds before when an int was passed.

  • The name of the factored test layer contains the module of the bases now. The name is used by zope.testrunner distinguish layers. Before this fix selenium layers factored from base layers with the same names but in different modules would be considered equal by zope.testrunner.

  • The factored ZTK layer cleanly shuts down the http server in tearDown now. This allows to run different selenium layers in one go.

0.5 (2010-08-03)

  • Add a static files test layer for running selenium tests against a set of static (HTML) files.

  • Patterns now also work with multiline strings, i. e. ‘foo*’ will match ‘foonbar’ (#7790).

0.4.2 (2010-05-20)

  • API expansion: *keyDown, *keyUp, keyPress.

0.4.1 (2010-04-01)

  • API expansion: added getSelectedLabel.

  • Ignore the code of a server’s response when calling open. The default behaviour of SeleniumRC changed between 1.0.1 and 1.0.2 but we want the old behaviour by default.

0.4 (2010-03-30)

  • API expansion: add getLocation to retrieve currently loaded URL in browser.

  • API expansion: added waitForPopUp, selectPopUp, deselectPopUp and close.

  • API expansion: added verifyAlertPresent, verifyAlertNotPresent and waitForAlertPresent.

  • Usability: raise a better readable exception when an unimplemented selenese method is called.

  • Usability: raise failure exceptions that convey the name of the failed assertion in spite of some lambdas wrapped around it.

0.3 (2010-01-12)

  • Extracted ‘host’ and ‘port’ as class attributes of gocept.selenium.ztk.Layer so subclasses can override them; stopped hardcoding 8087 as the server port.

0.2.1 (2009-12-18)

  • Fix incomplete sdist release on PyPI.

0.2 (2009-12-18)

  • Make Zope 2 test server reachable from the outside.

  • Implemented getTitle/assertTitle/waitForTitle/etc.

0.1 (2009-11-08)

  • first release

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gocept.selenium-0.9.tar.gz (29.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page