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:
Add gocept.selenium to the list of eggs either in your setup.py, or in buildout.cfg, using the extra ztk, i.e. gocept.selenium[ztk].
Install Selenium RC by some means, e.g. by downloading a version from seleniumhq.org . 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.
Run buildout to install gocept.selenium and selenium (the Python bindings for Selenium RC).
Create a layer for your tests, like this:
import gocept.selenium.ztk import zope.app.testing.functional zcml_layer = zope.app.testing.functional.ZCMLLayer( 'ftesting.zcml', __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.
Start writing tests that inherit gocept.selenium.ztk.TestCase; make sure you set the layer attribute to selenium_layer on each test class.
In your tests, use self.selenium to control Selenium RC, e.g.
class MyTest(gocept.selenium.ztk.TestCase): layer = selenium_layer def test(self): self.selenium.open('http://%s/foo.html' % self.selenium.server) self.selenium.assertBodyText('foo')
Run seleniumrc: java -jar /path/to/selenium-server.jar
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.
Use the grok extra when requiring gocept.selenium.
Create a layer for your tests:
import gocept.selenium.grok selenium_layer = gocept.selenium.grok.Layer(my.package)
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() transaction.commit() def test(self): self.selenium.open('/app') self.selenium.assertBodyText('foo')
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:
Use the wsgi extra when requiring gocept.selenium.
Create a layer for your tests:
import gocept.selenium.wsgi from mypackage import App test_layer = gocept.selenium.wsgi.Layer(App())
Inherit from gocept.selenium.wsgi.TestCase:
class TestWSGITestCase(gocept.selenium.wsgi.TestCase): layer = test_layer
Quick start with plone.testing
Use the plonetesting extra when requiring gocept.selenium.
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:
GOCEPT_SELENIUM_SERVER_HOST=selenium.mycompany.com GOCEPT_SELENIUM_SERVER_PORT=8888
If multiple browsers are connected to your selenium grid, you can choose the browser to run the tests with as such:
GOCEPT_SELENIUM_BROWSER=*iexplore
When you are running your selenium tests on a selenium grid, you need to instruct the browser which host and port to connect to:
GOCEPT_SELENIUM_APP_HOST=10.0.0.15 GOCEPT_SELENIUM_APP_PORT=8001
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 = 0.0.0.0 instead of the default localhost.
You can set the speed with which the tests are run through an environment variable:
GOCEPT_SELENIUM_SPEED=500
This example will introduce a 500 millisecond pause between tests.
Similar packages
zc.selenium – integrates Selenium Core with zope.testing.
Development
Report bugs at <https://intra.gocept.com/projects/projects/gocept-selenium/issues>.
Get the latest source with
svn co http://svn.zope.org/repos/main/gocept.selenium/trunk gocept.selenium
Changes
0.9 (2010-12-28)
Provide integration with the recent testlayer approach (zope.app.appsetup/zope.app.wsgi) 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.