skip to navigation
skip to content

pytest-webdriver 1.2.11

Selenium webdriver fixture for py.test

# Pytest Webdriver Fixture

This fixture provides a configured webdriver for Selenium browser tests, that takes screenshots for you
on test failures.


## Installation

Install using your favourite package installer:
```bash
pip install pytest-webdriver
# or
easy_install pytest-webdriver
```

Enable the fixture explicitly in your tests or conftest.py (not required when using setuptools entry points):

```python
pytest_plugins = ['pytest_webdriver']
```

## Quickstart

This fixture connects to a remote selenium webdriver and returns the browser handle.
It is scoped on a per-function level so you get one browser window per test.

To use this fixture, follow the following steps.

1. Nominate a browser host, and start up the webdriver executable on that host.
2. Download the latest zip file from here: https://sites.google.com/a/chromium.org/chromedriver/downloads
3. Unpack onto the target host, and run the unpacked chromedriver binary executable.
4. Set the environment variable ``SELENIUM_HOST`` to the IP address or hostname of the browser host. This defaults to the local hostname.
5. Set the environment variable ``SELENIUM_PORT`` to the port number of the webdriver server. The default port number is 4444.
6. Set the environment variable ``SELENIUM_BROWSER`` to the browser type. Defaults to ``chrome``.
7. Use the fixture as a test argument:

```python
def test_mywebpage(webdriver):
webdriver.get('http://www.google.com')
```

## `SELENIUM_URI` setting

You can also specify the selenium server address using a URI format using the SELENIUM_URL environment variable::

```bash
$ export SELENIUM_URI=http://localhost:4444/wd/hub
```

This is needed when dealing with selenium server and not chrome driver (see https://groups.google.com/forum/?fromgroups#!topic/selenium-users/xodZDJxt81o)
If SELENIUM_URI is not defined SELENIUM_HOST & SELENIUM_PORT will be used.


## Automatic screenshots

When one of your browser tests fail, this plugin will take a screenshot for you and save it in the current
working directory. The name will match the logical path to the test function that failed, like:

test_login_page__LoginPageTest__test_unicode.png


## `pytest-webdriver` and [PageObjects](https://page-objects.readthedocs.org/en/latest/)


If there is a pyramid_server fixture from the also running in the current test, it will detect this and set the ``root_uri`` attribute on the webdriver instance:

```python
def test_my_pyramid_app(webdriver, pyramid_server):
assert webdriver.root_uri == pyramid_server.uri
```

Why is this needed, you may ask? It can be used by the `PageObjects` library to automatically set the base URL to your web app. This saves on a lot of string concatenation. For example:

```python
from page_objects import PageObject, PageElement

class LoginPage(PageObject):
username = PageElement(id_='username')
password = PageElement(name='password')
login = PageElement(css='input[type="submit"]')

def test_login_page(webdriver, pyramid_server):
page = LoginPage(webdriver)
page.login.click()
page.get('/foo/bar')
assert webdriver.getCurrentUrl() == pyramid_server.uri + '/foo/bar'
```

## Changelog

### 1.2.11 (2017-7-21)
* Fix for OSX binding to illegal local IP range (Thanks to Gavin Bisesi)
* Setup and Py3k fixes for pytest-profiling (Thanks to xoviat)
* We no longer try and bind port 5000 when reserving a local IP host, as someone could have bound it to 0.0.0.0
* Fix for #46 sourcing gprof2dot when the local venv has not been activated

### 1.2.10 (2017-2-23)
* Handle custom Pytest test items in pytest-webdriver

### 1.2.9 (2017-2-23)
* Add username into mongo server fixture tempdir path to stop collisions on shared multiuser filesystems

### 1.2.8 (2017-2-21)
* Return function results in shutil.run.run_as_main

### 1.2.7 (2017-2-20)
* More handling for older versions of path.py
* Allow virtualenv argument passing in pytest-virtualenv

### 1.2.6 (2017-2-16 )
* Updated devpi server server setup for devpi-server >= 2.0
* Improvements for random port picking
* HTTPD server now binds to 0.0.0.0 by default to aid Selenium-style testing
* Updated mongodb server args for mongodb >= 3.2
* Corrections for mongodb fixture config and improve startup logic
* Added module-scoped mongodb fixture
* Handling for older versions of path.py
* Fix for #40 where tests that chdir break pytest-profiling

### 1.2.5 (2016-12-09)
* Improvements for server runner host and port generation, now supports random local IPs
* Bugfix for RethinkDB fixture config

### 1.2.4 (2016-11-14)
* Bugfix for pymongo extra dependency
* Windows compatibility fix for pytest-virtualenv (Thanks to Jean-Christophe Fillion-Robin for PR)
* Fix symlink handling for pytest-shutil.cmdline.get_real_python_executable

### 1.2.3 (2016-11-7)
* Improve resiliency of Mongo fixture startup checks

### 1.2.2 (2016-10-27)
* Python 3 compatibility across most of the modules
* Fixed deprecated Path.py imports (Thanks to Bryan Moscon)
* Fixed deprecated multicall in pytest-profiling (Thanks to Paul van der Linden for PR)
* Added devpi-server fixture to create an index per test function
* Added missing licence file
* Split up httpd server fixture config so child classes can override loaded modules easier
* Added 'preserve_sys_path' argument to TestServer base class which exports the current python sys.path to subprocesses.
* Updated httpd, redis and jenkins runtime args and paths to current Ubuntu spec
* Ignore errors when tearing down workspaces to avoid race conditions in 'shutil.rmtree' implementation

### 1.2.1 (2016-3-1)
* Fixed pytest-verbose-parametrize for latest version of py.test

### 1.2.0 (2016-2-19)
* New plugin: git repository fixture

### 1.1.1 (2016-2-16)
* pytest-profiling improvement: escape illegal characters in .prof files (Thanks to Aarni Koskela for the PR)

### 1.1.0 (2016-2-15)

* New plugin: devpi server fixture
* pytest-profiling improvement: overly-long .prof files are saved as the short hash of the test name (Thanks to Vladimir Lagunov for PR)
* Changed default behavior of workspace.run() to not use a subshell for security reasons
* Corrected virtualenv.run() method to handle arguments the same as the parent method workspace.run()
* Removed deprecated '--distribute' from virtualenv args

### 1.0.1 (2015-12-23)

* Packaging bugfix

### 1.0.0 (2015-12-21)

* Initial public release



 
File Type Py Version Uploaded on Size
pytest-webdriver-1.2.11.tar.gz (md5) Source 2017-07-21 7KB
pytest_webdriver-1.2.11-py2-none-any.whl (md5) Python Wheel py2 2017-07-21 9KB
pytest_webdriver-1.2.11-py2.7.egg (md5) Python Egg 2.7 2017-07-21 5KB