Metadata-Version: 2.0
Name: pytest-webdriver
Version: 1.3.0
Summary: Selenium webdriver fixture for py.test
Home-page: https://github.com/manahl/pytest-plugins
Author: Edward Easton
Author-email: eeaston@gmail.com
License: MIT license
Description-Content-Type: UNKNOWN
Platform: unix
Platform: linux
Classifier: License :: OSI Approved :: MIT License
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Software Development :: User Interfaces
Classifier: Intended Audience :: Developers
Classifier: Operating System :: POSIX
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Requires-Dist: py
Requires-Dist: pytest
Requires-Dist: pytest-fixture-config
Requires-Dist: selenium
Provides-Extra: tests
Requires-Dist: mock; extra == 'tests'

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:

.. code:: 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):

.. code:: 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:

.. code:: 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::

.. code:: 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:

.. code:: 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:

.. code:: 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.3.0 (2017-11-17)
~~~~~~~~~~~~~~~~~~

-  Fixed workspace deletion when teardown is None
-  Fixed squash of root logger in pytest-listener
-  Added S3 Minio fixture (many thanks to Gavin Bisesi)
-  Added Postgres fixture (many thanks to Gavin Bisesi)
-  Use requests for server fixtures http gets as it handles redirects
   and proxies properly

1.2.12 (2017-8-1)
~~~~~~~~~~~~~~~~~

-  Fixed regression on cacheing ephemeral hostname, some clients were
   relying on this. This is now optional.

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



