Selenium webdriver fixture for py.test
Project description
# 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.2 (2016-10-2r70)
* 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
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.2 (2016-10-2r70)
* 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
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
pytest-webdriver-1.2.2.tar.gz
(5.9 kB
view hashes)
Built Distributions
Close
Hashes for pytest_webdriver-1.2.2-py2.7.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | b0283312df583ce9264a514277b0e49684b45607d79355163d8d52753237beb0 |
|
MD5 | 06fe80e7d55e22671d9a52d1e6fd81ba |
|
BLAKE2b-256 | b39d6ca7a3df1c24e66289a7f62e69718fbd04416d86e00c5149cd31f8e47bb0 |
Close
Hashes for pytest_webdriver-1.2.2-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 74b938d736aebec68cd2e3038681c0296b7644b5ae4d1564cd873364e3ed4601 |
|
MD5 | e700b7dc043d1c5243d15a15761fb558 |
|
BLAKE2b-256 | e1c10e389a76e7e043900b9d291ff80cae7b6ba8af20adfa8bdb6040c19d40be |