Mink is a browser emulators abstraction layer.
It defines a basic API through which you can talk with specific browser emulator libraries.
Mink drivers define a bridge between Mink and those libraries.
This repository will allow you to easily try Mink and Behat to test… wikipedia.org!
Clone this repo:
git clone https://github.com/Behat/MinkExtension-example
Now install Behat, Mink, MinkExtension and their dependencies with composer:
curl http://getcomposer.org/installer | php
php composer.phar install
Now to launch Behat, just run:
bin/behat
Launch Behat: the two first scenarios should use Goutte.
The third one checks that the JS autocomplete field works on wikipedia: it uses Selenium WebDriver!
but lets ignore it for a quick start with --tags
filter:
vendor/bin/behat --tags ~@javascript
You should see an output like:
Feature: Search
In order to see a word definition
As a website user
I need to be able to search for a word
Scenario: Searching for a page that does exist
Given I am on /wiki/Main_Page
When I fill in "search" with "Behavior Driven Development"
And I press "searchButton"
Then I should see "agile software development"
Scenario: Searching for a page that does NOT exist
Given I am on /wiki/Main_Page
When I fill in "search" with "Glory Driven Development"
And I press "searchButton"
Then I should see "Search results"
2 scenarios (2 passed)
8 steps (8 passed)
There's 4 ways to run this suite:
-
Using
TraitedFeatureContext
, which leverages php5.4 traits for clean reusability. If you have php5.4 installed, just call:bin/behat -p=traits
-
Using
SimpleFeatureContext
, which uses inheritance mechanism to get predefined step definitions. If you prefer 5.3 and inheritance, just call:bin/behat -p=inheritance
-
Using
SubcontextedFeatureContext
, which uses subcontexts mechanism to get predefined step definitions. If you prefer 5.3 and subcontexts, just call:bin/behat -p=subcontexts
-
Using no context. This way will use default context from extension, giving you ability to avoid context creation altogether. Profile
no_context
uses non-existingbootstrap
path, so Behat will not be able to find any context class and will use defaulBehat\MinkExtension\Context\MinkContext
:bin/behat -p=no_context
You must choose between those 4 ways right now just for their demonstration. In reality, Behat supports them simultaneously and you can mix them together.
If you want to test @javascript
part of feature, you'll need to install Selenium.
Selenium gives you ability to run @javascript
tagged scenarios in real browser.
-
Download latest Selenium2 jar from the Selenium website
-
Run selenium jar with:
java -jar selenium.jar > /dev/null &
Now if you run:
bin/behat
you should see an output like this:
Feature: Search
In order to see a word definition
As a website user
I need to be able to search for a word
Scenario: Searching for a page that does exist
Given I am on /wiki/Main_Page
When I fill in "search" with "Behavior Driven Development"
And I press "searchButton"
Then I should see "agile software development"
Scenario: Searching for a page that does NOT exist
Given I am on /wiki/Main_Page
When I fill in "search" with "Glory Driven Development"
And I press "searchButton"
Then I should see "Search results"
@javascript
Scenario: Searching for a page with autocompletion
Given I am on /wiki/Main_Page
When I fill in "search" with "Behavior Driv"
And I wait for the suggestion box to appear
Then I should see "Behavior Driven Development"
3 scenarios (3 passed)
12 steps (12 passed)