Behat + Mink: Selenium und eigene Methoden

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.

bbcode-image
User annonyme 2018-12-12 18:29

write comment:
Four + = 11

Möchtest Du AdSense-Werbung erlauben und mir damit helfen die laufenden Kosten des Blogs tragen zu können?