Wenn man mit JavaScript zu tun bekommt, führt leider kein Weg an Selenium vorbei. Das erst einmal zum laufen zu bekommen ist dabei auch nicht immer einfach. Ich habe dabei gelernt, dass Firefox nicht wirklich funktioniert und Chrome dagegen ohne Probleme funktioniert. Um Selenium zum Laufen zu bekommen brauchen wir einiges:
- 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.