Behat + Mink: Selenium und eigene Methoden
- eine aktuelle Version des Selenium Standalone Servers als JAR
- den Chrome-Driver für Selenium
- Java
dann kann man Selenium mit java -Dwebdriver.chrome.driver=/opt/selenium/chromedriver -jar selenium-server-standalone-X.X.X.jar starten. Den Driver kann man natürlich auch in anderen Verzeichnissen ablegen.
https://selenium-release.storage.googleapis.com/index.html
In der Behat-config sieht es dann so aus:
default:
suites:
default:
contexts:
- Behat\MinkExtension\Context\MinkContext
# - TestContext
extensions:
Behat\MinkExtension:
base_url: 'http://www.hannespries.de'
files_path: 'vendor'
browser_name: 'chrome'
selenium2: ~
Um nun auch eigene Methoden wie Warten hinzuzufügen brauchen wir einen eigenen Context. Den legen wir unter features/bootstrap ab.
<?php
class TestContext extends \Behat\MinkExtension\Context\MinkContext {
/**
* @When I wait :arg1 seconds
*/
public function iWaitSeconds($seconds)
{
$this->getSession()->wait($seconds * 1000);
}
/**
* @When I click the :arg1 element accepting the alert
*/
public function iClickTheElementAcceptingTheAlert($selector)
{
$page = $this->getSession()->getPage();
$element = $page->find('css', $selector);
if (empty($element)) {
throw new Exception("No html element found for the selector ('$selector')");
}
$element->click();
$driver = $this->getMink()->getSession()->getDriver();
if($driver instanceof \Behat\Mink\Driver\Selenium2Driver){
/** $driver \Behat\Mink\Driver\Selenium2Driver*/
$driver->getWebDriverSession()->accept_alert();
}
}
}
Jetzt den Context eintragen. Weil wir mit extends arbeiten dürfen nicht beide aktiv sein, weil die sonst die selben Methoden implementieren.
default:
suites:
default:
contexts:
# - Behat\MinkExtension\Context\MinkContext
- TestContext
extensions:
Behat\MinkExtension:
base_url: 'http://www.hannespries.de'
files_path: 'vendor'
browser_name: 'chrome'
selenium2: ~
Nun können wir Warten und sogar Javascript Dialoge bestätigen.
Wenn wir nun mit "bin/behat features/XXX.feature" unser Test Scenario XXX starten öffnet sich der Chrome-Browser und wir können alle Tests visuell mit verfolgen.