+++ /dev/null
-Mink Extension
-==============
-
-You can use Behat to describe anything, that you can describe in business
-logic. It’s tools, gui applications, web applications. Most interesting part
-is web applications. First, behavioral testing already exists in web world -
-it’s called functional or acceptance testing. Almost all popular frameworks
-and languages provide functional testing tools. Today we’ll talk about how to
-use Behat for functional testing of web applications. `Mink <http://mink.behat.org>`_
-is a tool exactly for that and this extension provides integration for it.
-
-Basically, MinkExtension is an integration layer between Behat 3.0+ and Mink 1.4+
-and it provides:
-
-* Additional services for Behat (``Mink``, ``Sessions``, ``Drivers``).
-* ``Behat\MinkExtension\Context\MinkAwareContext`` which provides ``Mink``
- instance for your contexts.
-* Base ``Behat\MinkExtension\Context\MinkContext`` context which provides base
- step definitions and hooks for your contexts or subcontexts. Or it could be
- even used as context on its own.
-
-Installation
-------------
-
-This extension requires:
-
-* Behat 3.0+
-* Mink 1.4+
-
-Through Composer
-~~~~~~~~~~~~~~~~
-
-The easiest way to keep your suite updated is to use `Composer <http://getcomposer.org>`_:
-
-1. Install with composer:
-
- .. code-block:: bash
-
- $ composer require --dev behat/mink-extension
-
-2. Activate extension by specifying its class in your ``behat.yml``:
-
- .. code-block:: yaml
-
- # behat.yml
- default:
- # ...
- extensions:
- Behat\MinkExtension:
- base_url: 'http://example.com'
- sessions:
- default:
- goutte: ~
-
-Usage
------
-
-After installing extension, there would be 6 usage options available for you:
-
-1. Extending ``Behat\MinkExtension\Context\RawMinkContext`` in your feature suite.
- This will give you ability to use a preconfigured `Mink` instance altogether with some
- convenience methods:
-
- * ``getSession($name = null)``
- * ``assertSession($name = null)``
-
- ``RawMinkContext`` doesn't provide any hooks or definitions, so you can inherit from it
- in as many contexts as you want - you'll never get ``RedundantStepException``.
-
-2. Extending ``Behat\MinkExtension\Context\MinkContext`` with one of your contexts.
- Exactly like the previous option, but also provides lots of predefined step definitions out
- of the box. As this context provides step definitions and hooks, you can use it **only once**
- inside your feature context tree.
-
- .. code-block:: php
-
- <?php
-
- use Behat\MinkExtension\Context\MinkContext;
-
- class FeatureContext extends MinkContext
- {
- /**
- * @Then /^I wait for the suggestion box to appear$/
- */
- public function iWaitForTheSuggestionBoxToAppear()
- {
- $this->getSession()->wait(5000, "$('.suggestions-results').children().length > 0");
- }
- }
-
- .. warning::
-
- Keep in mind, that you can not have multiple step definitions with the same regex.
- It will cause a ``RedundantException``. So, you can inherit from ``MinkContext``
- only with one of your context/subcontext classes.
-
-3. Adding ``Behat\MinkExtension\Context\MinkContext`` as context in your suite.
- Exactly like previous option, but gives you the ability to keep your main context
- class clean.
-
- .. code-block:: yaml
-
- default:
- suites:
- my_suite:
- contexts:
- - FeatureContext
- - Behat\MinkExtension\Context\MinkContext
-
- .. note::
-
- Keep in mind, that you can not have multiple step definitions with the same regex.
- It will cause a ``RedundantException``. So, you can inherit from ``MinkContext``
- only with one of your context/subcontext classes.
-
-4. Implementing ``Behat\MinkExtension\Context\MinkAwareContext`` with your context.
-
-There are common things between these methods. In each of those, the target context will implement
-``setMink(Mink $mink)`` and ``setMinkParameters(array $parameters)`` methods. Those methods would
-be automatically called **immediately after** each context creation before each scenario. And
-this ``$mink`` instance will be preconfigured based on the settings you've provided in your
-``behat.yml``.
-
-Configuration
--------------
-
-MinkExtension comes with a flexible configuration system, that gives you
-the ability to configure Mink inside Behat to fulfil all your needs.
-
-Sessions
---------
-
-You can register as many Mink sessions as you want. For each session, you
-will need to choose the driver you want to use.
-
-.. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- first_session:
- selenium2: ~
- second_session:
- goutte: ~
- third_session:
- selenium2: ~
-
-MinkExtension will set the default Mink session for each scenario based on
-the configuration settings ``default_session`` and ``javascript_session``
-and on scenario tags:
-
-* A scenario tagged with ``@mink:foo`` will use ``foo`` as default session;
-* A scenario tagged with ``@javascript`` will use the javascript session as default session;
-* Other scenarios will use the default session.
-
-The default session and the default javascript session can also be configured for
-each suite:
-
-.. code-block:: yaml
-
- default:
- suites:
- first:
- mink_session: foo
- mink_javascript_session: sahi
-
-If it is not configured explicitly, the javascript session is set to the first
-session using a javascript driver in the order of the configuration (it would
-be ``first_session`` in the example above as ``selenium2`` supports Javascript).
-If it is not configured explicitly, the default session is set to the first
-session using a non-javascript driver if any, or to the first javascript session
-otherwise (it would be ``second_session`` above as ``goutte`` does not support
-javascript).
-
-Drivers
-~~~~~~~
-
-First of all, there are drivers enabling configuration. MinkExtension comes
-with support for 6 drivers out of the box:
-
-* ``GoutteDriver`` - headless driver without JavaScript support. In order to use
- it, modify your ``behat.yml`` profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- goutte: ~
-
- .. Tips : HTTPS and self-signed certificate
- In case you use Behat/Mink/Goutte to test your application, and want to test an
- application secured with HTTPS, but with a self-signed certificate, you can use
- the following parameters to avoid the validation error triggered by Guzzle:
-
- * For ``Guzzle 4`` or later:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- goutte:
- guzzle_parameters:
- verify: false
-
- * For ``Guzzle 3`` or earlier:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- goutte:
- guzzle_parameters:
- ssl.certificate_authority: false
-
-* ``Selenium2Driver`` - javascript driver. In order to use it, modify your
- ``behat.yml`` profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- selenium2: ~
-
-* ``SauceLabsDriver`` - special flavor of the Selenium2Driver configured to use the
- selenium2 hosted installation of saucelabs.com. In order to use it, modify your
- ``behat.yml`` profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- sauce_labs: ~
-
-* ``BrowserStackDriver`` - special flavor of the Selenium2Driver configured to use the
- selenium2 hosted installation of browserstack.com. In order to use it, modify your
- ``behat.yml`` profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- browser_stack: ~
-
-* ``SeleniumDriver`` - javascript driver. In order to use it, modify your ``behat.yml``
- profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- selenium: ~
-
-* ``SahiDriver`` - javascript driver. In order to use it, modify your ``behat.yml``
- profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- my_session:
- sahi: ~
-
-* ``ZombieDriver`` - zombie.js javascript headless driver. In order to use it, modify
- your ``behat.yml`` profile:
-
- .. code-block:: yaml
-
- default:
- extensions:
- Behat\MinkExtension:
- sessions:
- default:
- zombie:
- # Specify the path to the node_modules directory.
- node_modules_path: /usr/local/lib/node_modules/
-
-.. note::
-
- The phar version of Mink comes bundled with all 5 drivers and you don't need to do
- anything except enabling them in order to use them.
-
- But if you're using Composer, you need to install drivers that you need first:
-
- - GoutteDriver - ``behat/mink-goutte-driver``
- - SeleniumDriver - ``behat/mink-selenium-driver``
- - Selenium2Driver (also used for Saucelabs) - ``behat/mink-selenium2-driver``
- - SahiDriver - ``behat/mink-sahi-driver``
- - ZombieDriver - ``behat/mink-zombie-driver``
-
-.. note::
-
- All drivers share the same API, which means that you could use multiple drivers
- for the same suite - which one fits your needs for concrete scenarios. Don't
- try to stick to a single driver as there's simply no universal solution - every
- driver has its pros and cons.
-
-Additional Parameters
-~~~~~~~~~~~~~~~~~~~~~
-
-There's other useful parameters, that you can use to configure your suite:
-
-* ``base_url`` - if you're using relative paths in your ``*.feature`` files
- (and you should), then this option will define which url to use as a basename
- for them.
-* ``files_path`` - there's a special step definition for file upload inputs
- usage. You can use relative paths in those steps. ``files_path`` defines
- base path in which Mink should search those relative files.
-* ``show_cmd`` - there's a special definition in MinkExtension, that saves
- currently opened page into temporary file and opens it with some browser
- utility (for debugging). This option defines command to be used for opening.
- For example: ``show_cmd: 'firefox %s'``.
-* ``show_tmp_dir`` - the temporary folder used to show the opened page (defaults
- to the system temp dir)
-* ``show_auto`` - Whether the opened page should be shown automatically when
- a step fails.
-* ``browser_name`` - meta-option, that defines which browser to use for Sahi,
- Selenium and Selenium2 drivers.
-* ``default_session`` - defines default session (driver) to be used for all
- untagged scenarios. Could be any enabled session name.
-* ``javascript_session`` - defines javascript session (driver) (the one, which
- will be used for ``@javascript`` tagged scenarios). Could be any enabled session
- name.
-* ``mink_loader`` - path to a file loaded to make Mink available (useful when
- using the PHAR archive for Mink, useless when using Composer)