Archive | CI RSS feed for this section

SeleniumConf came to London!

23 Apr

As mentioned on the Selenium Conference 2012 website, this year conference would be across the pond and it was London.  Conference venue ‘IET London‘ was amazing place situated on the bank of Thames river and great view of historical London Eye. I live and work in London so it’s very convenient for me to get down to the location of the conference. I met with with selenium users all across the world and shared thoughts and ideas about open-source testing. Selenium conference started on Monday April,16 and wrapped up on Wednesday, April,18. I spend three memorable days at Selenium conference and learned a lot about new tools, methodologies and approaches of testing applications with Selenium. I would like to take this opportunity to thank SauceLabs and all other sponsors of the Selenium Conference.

Let me see, how can I explain what happened in the conference.


It was drizzling, when I came out of the Embankment tube station, and need to walk for 2-3 minutes to get to the venue. It wasn’t difficult to find venue and reception of the Selenium conference. I met with Ashley Wilson, (Customer Development Manager at SauceLabs) at registration desk. Ashley played key role in organizing and managing Selenium Conference. then I didn’t forget to pick a T-Shirt labeled with ‘Selenium Conference 2012’. The breakfast and tea was ready.

It was difficult to choose a workshop as both were interesting. I decided to go for workshop ” Contributing to Selenium” by ‘WebDiver Guy‘ (Simon Stewart) in the morning session.

“Contributing to Selenium” Workshop

The workshop aimed at contribution to selenium open-source project. I was ready with all the code downloaded from googleCode and brand new IntelliJ IDE.  I have heard about cool features of the IntelliJ but never tried it before. It is really awesome. Simon already mentioned in technical requirements that ‘ Setting up project in Eclipse is not supported’.

Within the workshop, I had a look at directory structure of the selenium codebase, setup the project in the IntelliJ and also done some code modifications as suggested by Simon. At the middle of the workshop, I was lagging behind while running the JavaScript tests. I ran build with ‘build.desc’ file also ran some test with Firefox driver. Lately, I realised that I was surounded by ‘software engineer in test’ from Google. Lucky me !!

After the break, we started with running tests within IDE. Being new to the ItelliJ, I faced some issues while running tests but managed to get it worked with the help of Simon.  At the end of the workshop, someone asked question about ‘How to measure coverage of the Selenium/Functional tests’  and there were interesting discussion around this topic. Being from PHP background, I couldn’t resist myself to ask about ‘PHP Webdriver bindings and current development on PHP bindings’. Simon said ” In terms of PHP, FaceBook-Webdriver bindings are recommended”. Simon then introduced me to Damien Sereni who works in Facebook. At the end of the session. Me and Demien spend some time discussing about future of the PHP webdriver bindings also shared contact details. The lunch was waiting for us then.

After lunch, again I had to make tough decision about selecting workshop. I have decided to go to “If Ikea made instructions for Selenium (or: How to fix bugs in Selenium for yourself)” by  Daniel Wagner-Hall, and the Selenium Committers. I really missed the another one “Handmade Etsy Tests” by  Stephen Hardisty & Michelle D’Netto. Lately realised that Etsy uses Behat and Mink for functional testing which is interesting topic for me which I missed a lot.

How to fix bugs in Selenium for yourself

In this workshop, Daniel talked about selenium codebase and different drivers. I have already checked out selenium trunk in my system and need to look into Selenium bugs to pick up. Being a tester and having limited development knowledge, I realised that I can’t fix any bug in selenium so just started doing some interesting stuff. I managed to get the tests running on my Andriod phone with the help of Andriod driver. That was enough for me it this session and it was end of first day of the selenium conference.


April,17 is my birthday. I reached early on that day in order to register my unconference talk on “Behat and Sauce Labs Integration”. I registered my talk at 10PM  on that day. I was very excited to talk on the occasion of my birthday.

Anyway, I saw huge crowd on second day of the conference and met with people from different countries while having tea and breakfast. At 9 PM, we get into the lecture hall, which was huge and amazing. There was one tweet from Frisco Del Rosario (@frdelrosario) saying ” Auditorium at #SeConf had balconies, microphones at each chair, flawless wi-fi.

As per the schedule, Jason and Simon introduced sponsors and explained schedule of Track A and Track B talks.

Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selenium Infrastructure

Most people turned on for Track B talk which was on ” Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selenium Infrastructure”  by  Dan Cuellar. I also headed over to that talk. Slides of his talk are available on here Dan explained how to test rapidly changing applications with just small code change in the test infrastructure. Dan implemented object oriented approach that can handle such a rapid change. As per the Dan if you abstracted the code well then you can build robust automated test scripts. Dan is looking for someone who can help him to extend his work to support iOS. If you are interested to help him then email him at

Web acceptance Testing with Behat

After Dan’s talk, it was my turn to give talk on ‘Web Acceptance Testing with Behat’. There was another Track A talk where Anand Ramdeo was talking about “One Step At a Time” most people turned out there. I was bit disappointed seeing only 10 people attending my talk but still I carried it forward. My talk covered BDD and ATDD with the Behat, Sauce Labs , Jenkins and Relish. Slides of my talk are available here.

So you’re automated… now let’s make it fast!

I have decided to stay at Track B where Sauce Ninja Santiago was about to talk on making test automation fast. The title of his talk was ” So you’re automated… now let’s make it fast!”. Santiago shared some tips to make selenium tests faster like avoiding static waits in the tests or running tests in parallel. At the end of the Santiago’s talk, there are couple of raised which sounds interesting to Santiago. There was a question from Mitch about database integration with selenium tests which was interesting. I asked question about flaky tests that fails in the cloud complaining “element not found” but works well in local machine. As per Santiago, it’s bit tricky to judge random failures in browsers in the cloud.

Using Selenium to Improve a Team’s Development Cycle

After the break, I headed over to lecture hall to hear Mike Devis talking about “Using Selenium to Improve a Team’s Development Cycle“. Mike shared some cool tips about improving quality of the functional tests. Mike also talked about involving developers to write tests. I really like the idea of profiling the tests.  Ultimately, it was very pleasant talk with lots of good tips

Geb: Very Groovy Browser Automation

This is one of the best talk from my point of view. Thanks to Luke Daley. This talk was about Geb. Geb is a browser automation framework which combines cool features of WebDriver, jQuery and the Page Objects. Most interesting thing, I found in this talk is $() method. The dollar method can be used to interact with the web pages and accessing web elements. Another interesting thing is integration of Geb with different frameworks like JUnit, TestNG, Spock, Cucumber. At the end of the talk, I asked question on integration of Geb with new Cucumber JVM. Once Luke finished his talk, we went to reception to have a lunch.

Robots: If You Can’t Beat ‘Em, Build ‘Em

Well, This was most interesting demo to watch that how Jason “Teach Robot to play Angry Bird“. Click the link and watch the video inside the presentation, you will be amazed by seeing that how it can be achieved with Selenium. I think, only God and Jason knows how to write code for this. I just enjoyed the demo and applauded at the end of talk.

Building Quality with Foundations of Mud

After Jason’s talk, Kristian Rosenvold was talking about ‘Building Quality’. Kristian explained how to build test environment, test data and Continuous Integration practices in order to build quality products. He again explained some cool tips to handle flaky tests and errors. His slides are explanatory. Kristian made one statement who liked by selenium contributors. It was “Make your dev team live and Breathe the build”  At the end of the presentation, I asked question on Tolerance rate of their functional tests. Kristian answered that they can tolerate failing integration tests but not the functional tests. Well, then it was time for quick break then.

Massively Continuous Integration

Continuous Integration is area of my interest so I didn’t want to miss talk on my favorite topic. I headed over to the Track B where Jesse Dowdle & David Tolley were talking on their huge continuous integration system. As per their slides, they have reduced cycle time of running tests from 3 days to 30 minutes. The amount of selenium tests and cycle time to run them over Grid literally amused me. They used Jenkins and amazon web for running the tests. I would rather recommend looking at the slides of the presentation. It was amazing talk.I would like to see demo how they run massive test suite within 30 mins. Thanks to speakers & Jenkins.

How to Test the Inside of Your Head

Speaker Liz Keogh is vary famous agile/BDD coach and international speaker. I was impressed by her talks on BDD at Skills Matter. No wonder her talk at Selenium Conference was one the best. Liz talked about collaboration between developers, testers, BA, project managers and customers. As per Liz “Testers are Evil so let them think before writing code“.  Most of people on twitter channel were saying it was brilliant talk.

Well, how can I forget that there was amazing party sponsored by FaceBook at the GlassHouse Store, London. I met with people all around world and had great chat with them. Food and drinks were amazing. Great opportunity to celebrate birthday with unlimited drinks and food. Thanks Facebook.


Last day of the selenium conference was full of interesting talks, lighting talks and end up with closing keynote session. At the start of the day ‘ Simon Stewart’ kicked off with his talk on status of Selenium projects since last selenium conference

State of the Union

Simon didn’t forget to mention that he is on twitter (@shs96c) at the start of his talk. Simon highlighted recent enhancements of the Selenium project. He also point out an year in a browser and new selenium committers. The most interesting part of his presentation was his analysis of job trends in year, the graph amused everyone.

Simon addressed future development will be on mobile drivers as they are being valuable in recent days. He also expecting new stuff with respect to W3C standard. Let’s see how it will go on in near future. Slide of his talks are available here.

After Simon’s talk I headed over to Track B where “TFT Test Automation Framework” talk was going on. It was all about maintaining and writing automated tests just by using spreadsheets.  I really missed “Introducing Selenium Builder – the Future of Test Development” talk by Adam Christian and David Stark. Hope to see videos of the talk soon.

Selenium in the Enterprise: What Went Right, What Went Wrong (So Far)

Noah Sussman  was talking about how they used selenium at Etsy. This talk was more about test maintenance and test infrastructure at Etsy. Being a big fan of Behat, I came across one the slide saying “Etsy used Behat & Mink for functional testing”. I was keen to know more about that and asked question on how they used behat in their projects also had a chat after talk with Noah.

 Automated Security Testing

Alan Parkinson was talking about  ‘Zed Attack Proxy (ZAP) Web-Driver’ for automated security testing. Alan introduced ZAP during his talk and then integrated with build system like ANT. Alan’s demo of ZAP and Jenkins was amazing. I couldn’t resist myself to tweet about that. It’s great approach to perform automated security check on build. I will definitely give a try.

Pluggable Test Infrastructure

As far I remember, I have seen video of last selenium conference Dima talking about Selenium and Cucumber. This year Dima and Jeff comes up with Pluggable Test Infrastructure. They are using Cucumber, Capybara and webdriver at Groupon. Jeff said that using Cucumber is debatable. Jeff & Dima combined API tests, iPhone tests, Sauce tests and Selenium tests with Cucumber. It would be interesting to see demonstration of how they achieved this.

Speed up Your Selenium Tests with PhantomJS, the Headless Browser

Ivan De Marino was then talking about PhantomJS  in order to make selenium tests fast. In his talk he showed how you could run selenium tests with PhantomJS and Ghostdriver. Ghostdriver is wire protocol on PhantomJS. One of the tweet was saying Ghostdriver has awesome potential but needs your contribution. If you wish to contribute then fork Github repo now.

Robot Framework

Once Ivan finished his talk on PhantomJS, I have decided to go for Track B where Philip Noetzel was talking about “Robot Framework: Semicolon free testing”. I heard a lot about Robot Framework but didn’t got chance to look into it. This talk was very beneficial for me as Philip shows some cool stuff about robot framework and also shown sample code. Philip also shared his thoughts about pros and cons of using Robot framework. At the end of the presentation we asked Philip if we can use Robot framework for PHP applications.

More Than Automation – How Good Acceptance Tests Can Make Your Team Happier

I was keen to hear Matt Wynne, author of Cucumber book talking about ‘More Than Automation‘. Matt introduced Mortgage Driven Development (MDD) where developers try to make feature completely readable and unmaintainable in order to save your job!. Matt also added concept of “Refuctoring” where developers try to add brittle steps and scenarios in order to make it messy. Well, Matt also said ” Cucumber is a threat” but then audience understood whats intention behind all this idea. As per Matt, Cucumber is cool take which allow everyone to collaborate and write tests. Matt also suggest to read Cucumber book in order to get yourself familiar with Behavior Driven Development (BDD). Matt shared cool tool for living documentation called ‘Relish’. At the end of the talk, there were couple of question around Relish. one of them was asked by me.

Lightning Talks

There were about 10  lightning talks (including mine) scheduled on the board and each one of 5 minutes. Lightning talks was fun. I liked Anand and Komal talked about how to do things wrong. It was nice talk. I am keenly waiting to see videos of Lightning talks.

Closing Keynotes

After the lighting talks there were another session called ‘Closing Keynotes’ where all the selenium committers discuss about the future enhancements and answered questions. There was one interesting question comes up in this session about Selenium 3. Conference was then wrapped up by thanking everyone who attended the conference.


 I bet, everyone who attended conference had loads of fun and learned new things. Those were was not able to attend the conference, they got live conference updates from twitter hashtag #SeConf. I got a tweet from Michelle Flynn (@MichelleFlynn) saying “Great twitter chat about #SeConf, love how you can follow a conference even if you cannot attend

Many people all over the world was getting updates on selenium conference every minute. Thanks to organizers for creating such a unique hashtag also thanks to all twitter users who twitted in #SeConf

Interesting things I found.

  • Mortgage Driven Development
  • Mobile Drivers
  • Use of BDD tools with Selenium like Cucumber, SpecFlow, Behat
  • Geb: Very groovy browser automation framework
  • ‘Atkins’ plug-in for Jenkins
  •  Robot Framework for BDD and DDD
  • Large scale Continuous Integration with Jenkins and Amazon cloud services


Selenium conference taught me lot of new things around Selenium also given an opportunity to meet with Selenium users all across the globe which was amazing experience. Great speakers, great learning experience and amazing location. Thanks SauceLabs, Google and all other sponsors. Looking forward next year !

PHPUnit + Behat/Mink + Page Object: The Rockstar Combination of Testing

7 Apr

Last month, we had discussion about implementing page object pattern in Behat/Mink framework at London Behat Users meetup . Page object pattern is a cool way to make tests maintainable, reusable and readable. Everyone was interested to know more about Page Object Pattern.

In this short tutorial, we will implement Mink and PHPUnit  combination for functional testing. Mink and PHPUnit combined with Pageness (Page Object) can be used for maintainable and readable tests. Mink is a web acceptance testing framework for PHP application. Mink has clean API’s which allows browsers emulation and browser controls. Mink has headless browser emulators as well as browser controls which covers all browsers interactions. PHPUnit is testing framework for PHP applications.


Lets start with some installations assuming PHP, Pear package is already installed.

Install PHPUnit

Now, upgrade pear package & install PHPUnit

$ pear update-channels
$ sudo pear channel-discover
$ sudo pear channel-discover
$ pear channel-discover
$ sudo pear install –alldeps phpunit/PHPUnit
$ phpunit --version

Install Behat/Mink

$ pear channel-discover
$ pear channel-discover
$ pear install behat/mink

Mink is ready to use just including in PHP classes.

require_once 'mink/autoload.php';

PHPUnit-Mink Framework on GitHub

PHPUnit-Mink framework designed to use combination of PHPUnit, Mink and Page Object Pattern to write functional tests with various browser emulators like Goutte, Selenium, Sahi and WebDriver. PHPUnit-Mink Framework has used Mink and PHPUnit to write tests. Driver support for Selenium, Sahi, WebDriver for browser emulation. Test Report Generation which can plugged in Continuous Integration server. Page Objects which can be used directly in tests. Abstracted common elements up in the framework in order to make it maintainable.

How to use:

  • Clone GitHub Repository
$git clone
$cd PHPUnit-Mink
  • Start your Driver

Sahi Driver :

Download sahi zip file from SourceForge

Now launch Sahi Server using command below:

$ cd /path/to/sahi
$ cd userdata/bin

Selenium Driver:

You need to download selenium server jar file and execute following command:

$ cd /path/to/selenium-server
$java -jar selenium-server-standalone-2.20.0.jar 

In this tutorial, we are using sahi driver.

  • Now run tests using ANT
$cd /path/to/PHPUnit-Mink
$ant Mink

Directory structure

  1. conf    : YAML files can be used with Behat
  2. core    : Abstracted common elements/ methods
  3. Page   : Page objects (reusable Methods for page)
  4. report :  Generate Junit, Agile doc reports
  5. tests    :  PHPUnit tests using Mink Api’s

Don’t forget to include Mink and PHPUnit in Test like this:

require_once 'mink/autoload.php';
use Behat\Mink\Mink,

Page Objects Pattern

There are some areas within application UI where your test interacts with. These areas can be identified by their functionality, they offer e.g login, registration, search etc. Page object pattern models as a object within you test code. While writing tests, we just need to create an object of the page and access methods and variables withing that page objects. This approach is useful when UI changes, we need to make changes in page objects not in the tests. Tests become readable and maintainable using page objects.

Page objects classes generally:

  1. Set of public methods that page offer which can be reused later.
  2. don’t make any assertion. Assertions can be added later into tests not in the page objects
  3. checks if user is on the same page that page object is created.
  4. don’t represent entire page but some important functions of that particular page.

GitHub & Other sources of Page object pattern

Read more about page object on  google wiki. There are couple of GitHub repositories that explains page object pattern, Saunter and pelenium

Writing Page Objects:

Common methods can be abstracted in the ‘page’ directory. You can specify driver of your choice. Now we have test with Sahi session. Example page looks like this

require_once 'mink/autoload.php';
use Behat\Mink\Mink,
require_once 'core/core_PHPUnitMink_CommonElementFunctions.php';
class page_search extends TestCase
function search($input)

Using Page Objects in Tests

You can use pages just by creating new objects and accessing variables,methods in the test. Example of test looks like this

class wikiSearchTest extends core_PHPUnitMink_CommonElementFunctions
protected static $mink;</pre>
public function testwikiSearchsingle()
 $page = new page_search($this):
<pre>assertEquals(“Mumbai”, $page->findFirstHeading()));

Writing Data-Driven Tests

You can write data driven tests by using PHPUnit and Mink combination. Data can be placed in CSV or in an array. Example data-driven test looks like this

class wikiSearchTest extends core_PHPUnitMink_CommonElementFunctions
protected static $mink;
function searchData() {
return array(
array('newyork','New York')
* @param &lt;type&gt; $searchfor
* @param &lt;type&gt; $expectedResult
* @dataProvider searchData

public function testwikiSearchMultiple($input,$output)
assertEquals($output, $this->getMink()->getSession('sahi')->getDriver()->getText(".//*[@id='firstHeading']/span"));


Starting Engines

Before running tests, you need to start Mink drivers, here we are using Sahi. You can update tests to run Selenium driver. Launch driver from command line like this:

  • Sahi : Navigate to Sahi directory and run:
moonstar:~ sjagtap$ cd sahi/userdata/bin/
moonstar:bin sjagtap$ ./
SAHI_HOME: ../..
SAHI_USERDATA_DIR: ../../userdata
Sahi properties file = /Users/sjagtap/sahi/config/
Sahi user properties file = /Users/sjagtap/sahi/userdata/config/
Added shutdown hook.
&gt;&gt;&gt;&gt; Sahi started. Listening on port: 9999
&gt;&gt;&gt;&gt; Configure your browser to use this server and port as its proxy
&gt;&gt;&gt;&gt; Browse any page and CTRL-ALT-DblClick on the page to bring up the Sahi Controller
Reading browser types from: /Users/sjagtap/sahi/userdata/config/browser_types.xml
  • Selenium
moonstar:downloads sjagtap$ java -jar selenium-server-standalone-2.20.0.jar
Apr 7, 2012 3:34:19 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a standalone server
1 [main] INFO org.openqa.selenium.server.SeleniumServer - Java: Apple Inc. 20.1-b02-383
1 [main] INFO org.openqa.selenium.server.SeleniumServer - OS: Mac OS X 10.7.1 x86_64
8 [main] INFO org.openqa.selenium.server.SeleniumServer - v2.20.0, with Core v2.20.0. Built from revision 16008
131 [main] INFO org.openqa.selenium.server.SeleniumServer - RemoteWebDriver instances should connect to:
132 [main] INFO org.openqa.jetty.http.HttpServer - Version Jetty/5.1.x
132 [main] INFO org.openqa.jetty.util.Container - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
133 [main] INFO org.openqa.jetty.util.Container - Started HttpContext[/selenium-server,/selenium-server]
133 [main] INFO org.openqa.jetty.util.Container - Started HttpContext[/,/]
273 [main] INFO org.openqa.jetty.util.Container - Started org.openqa.jetty.jetty.servlet.ServletHandler@62f47396
273 [main] INFO org.openqa.jetty.util.Container - Started HttpContext[/wd,/wd]
279 [main] INFO org.openqa.jetty.http.SocketListener - Started SocketListener on
279 [main] INFO org.openqa.jetty.util.Container - Started org.openqa.jetty.jetty.Server@4a79717e

Running Tests with PHPUnit

Now you can run wikisearch test with PHPUnit like this :

moonstar:PHPUnit-Mink sjagtap$ phpunit tests/wikiSearchTest.php

Temporary SauceLabs fork 3.5.24 of PHPUnit by Sebastian Bergmann. Supports parallel testing. Becomes obsolete when PHPUnit 3.7.0 is released.


Time: 33 seconds, Memory: 11.25Mb

OK (3 tests, 3 assertions)

Running Tests with Ant

You can run tests using apache ANT. Navigate to project root directory (PHPUnit-Mink) and run an

moonstar:PHPUnit-Mink sjagtap$ ant Mink
Buildfile: /Users/sjagtap/PHPUnit-Mink/build.xml
[delete] Deleting directory /Users/sjagtap/PHPUnit-Mink/report
[mkdir] Created dir: /Users/sjagtap/PHPUnit-Mink/report

[exec] Temporary SauceLabs fork 3.5.24 of PHPUnit by Sebastian Bergmann. Supports parallel testing. Becomes obsolete when PHPUnit 3.7.0 is released.
[exec] ....
[exec] Time: 45 seconds, Memory: 11.75Mb
OK (4 tests, 4 assertions)

Total time: 46 seconds
moonstar:PHPUnit-Mink sjagtap$ 

Once all tests finished running, you will see build successful message. This build can be easily plugged into Continuous Integration server like Jenkins.


Functional testing become much easier with use of Mink with PHPUnit. Page Object pattern can be used with PHPUnit-Mink to make tests reusable and readable.

You can find source code on GitHub PHPUnit-Mink repository. Happy PHP Testing !

Web Acceptance Testing Framework for PHP

9 Jan

Web Acceptance Testing Framework for PHP

A Web acceptance testing  framework for PHP is now available on GitHub. It can be used for web acceptance testing of the PHP projects. This framework is build around Behat, Mink, Sauce Labs and ANT. You can configure it with a continuous integration server like Jenkins.

Behat is a BDD framework for PHP.  Behat comes up with Mink  which is used for browser emulation (functional testing) where browser interaction takes place. Behat and Mink combination is used for web acceptance testing.

 Key features of web acceptance testing framework

  • Selenium and Sahi servers are plugged into build file, user doesn’t need to download or launch Selenium or Sahi server while running features with ANT or Jenkins.
  • Test reports are generated in HTML and xml format in “/report” directory.
  • Easy switching over to another driver. You can run tests using any available drivers, just by specifying name of them.
  • Framework is integrated with cloud testing service called “Sauce Labs”. You can run your features in cloud with selenium driver.
  • Testers can get started easily without any hassles.
  • With little changes in config file, it is ready for your project.

Behat for Testers

Testers might have tried Cucumber & Selenium or Cucumber & capybara combination for Ruby projects. BDD for testers could be very interesting topic to discuss. Testers can now use BDD framework for PHP project as well. Thanks to Behat !

Behat has provided lot of driver options for testers. Its not limited to selenium. It has following mink drivers.

Tester can pick one of these and start implementing features. Goutte can be used for tests which doesn’t need browser interaction. Tester can always switch to another driver if feature is failing for one of the driver. There are some pro’s and con’s of each driver

Sahi Selenium Webdriver

Implicit Wait Yes No Yes
Hidden Link Access Yes Yes No
Sauce Lab Support No Yes No
Speed Medium Medium Fast
Https sites testing Hectic, need to add certificate exception Accepts certificated automatically Accepts certificated automatically

It is very important to choose right driver for your testing. It depends on your application and requirement. This framework makes it easy to switch over to another driver.

What you need to use framework?

Install Behat using Behat documentation which explained all these methods in simple way. Similarly install mink using Mink documentation.

  • Create Your Project

Initiate Behat:

$ behat --init
  • Clone Web Acceptance testing  Framework from GitHub

  1. Clone test framework from Github into your local machine.
  2. Make sure you have initialized Behat in your root directory, currently its “Behat”.
  3. Now you are ready to use the framework for adding features and running them with different drivers like Selenium, Sahi or webdriver.
  • How to use framework?
  1. Change “base_url” “browser” parameter in all config files like ‘behat.yml’, ‘sahi.yml’, ‘selenium.yml’, and ‘webdriver.yml’ as per your project requirement. eg change in sahi.yml file as shown below
javascript_session: sahi
base_url: http://{your url}
browser: {your browser}
show_cmd: open %s 

Run features locally

To run feature locally, you need to start Selenium or Sahi server before executing them.

Download Selenium or Sahi and launch Selenium or Sahi server as shown below

Selenium Server

You need to download selenium server jar file and execute following command:

$ cd /path/to/selenium-server
$java -jar selenium-server-standalone-2.15.0.jar 

Sahi Server

Download sahi zip file from SourceForge

Now launch Sahi Server using command below:

$ cd /path/to/sahi
$ cd userdata/bin

Now you can run behat command to run feature locally

$ cd /path/to/behat
$behat --name wikiSearch (your feature)

You can see feature running on your local host.

  • How to run features using ANT

You need to install Apache Ant on your localhost. You can download and install Ant from Apache Ant website.

No need install or download selenium or Sahi. It is configured inside this framework. Ant will automatically launch selenium or Sahi server still you need to update version of selenium server frequently.

Now you got three drivers options to run your features

  1. Sahi Driver
  2. Selenium Driver
  3. Selenium 2 Driver (webdriver)
  • Run feature with selenium driver
$ cd /path/to/my/project
$ant runSelenium 
  • Run feature with Sahi driver.
$ cd /path/to/my/project
$ant runSahi 
  • Run feature with webdriver
$ cd /path/to/my/project
$ant runWebdriver
$ cd /path/to/my/project
$ant sauceTests 

If you are using selenium driver, then you have to implement wait in your step definitions every time there is new page is loaded like this:


Sahi driver waits automatically for element to be appear on page or page to load. You don’t have to implement wait if you would like to use Sahi driver.

Once you run ‘ant’ command from terminal you will see your feature running in browser, you configured.You will see reports generated in “/report” directory. There will be HTML reports as well.

Configure Jenkins to run features


  • Download & Launch Jenkins by executing below command:
$  java -jar jenkins.war

Visit url : http://localhost:8080 to access Jenkins in browser. You can specify different port to launch Jenkins.

  • Create new Build a free-style software project and name it “Behat”
  • Configure job by specifying your repository.(Git, SVN, CSV)
  • You need to Invoke Ant as shown below

Jenkins Configuration

If you wish to run tests using Sahi driver then specify target as “runSahi”

You can see reports generated once you run your feature.


Using web acceptance test framework for PHP, you can write features and run them easily on ANT, Jenkins and Sauce labs with choice of available drivers.

Happy BDD for testers !! Any questions or comment mention me @Shashikant86 on Twitter.