2016-06-28 17 views
0

Ich versuche meine Laravel App von Behat zu testen. Es gibt eine Homepage mit Feldern für Name, E-Mail und "Registrieren" Button. Ich versuche Taste in Behat-Test zu drücken, aber ich habe einen Fehler Fatal error: Call auf eine Elementfunktion drücken() auf null (Behat \ Testarbeiten \ Anruf \ Exception \ FatalThrowableError)Behat Laravel kann nicht finden submit

Mein HTML:

<html> 
 
    <head> 
 
    </head> 
 
    <title>Registration</title> 
 
    <body> 
 
     <form action="/thanks" name="register"> 
 
      <p align="center"><font size="4"><b>Please, enter your name and e-mail</b></font></p> 
 
      <p align="center"><input name="name" type="text" value="name"></p> 
 
      <p align="center"><input name="email" type="text" value="e-mail"></p> 
 
      <p align="center"><input name="registerButton" type="submit" value="Register"></p> 
 
      <p>&nbsp;</p> 
 
     </form> 
 
    </body> 
 
</html>

Meine FeatureContext Funktion:

/** 
* @When I press the :submit 
*/ 

public function iPressTheSubmit($submit) { 
    $element=$this->getSession()->getPage()->findButton($submit);  
    $element->click(); 
} 

Szenario:

Scenario: Register Test 
Given I am on the homepage 
When I press the "registerButton" 
Then I should be on "/thanks" 

Ausgang:

Scenario: Register Test # features/regpage.feature:4 Given I am on the homepage # FeatureContext::iAmOnHomepage() When I press the "registerButton" submit # FeatureContext::iPressTheSubmit() Fatal error: Call to a member function press() on null (Behat\Testwork\Call\Exception\FatalThrowableError) Then I should be on "/thanks" # FeatureContext::assertPageAddress() --- Failed scenarios: features/regpage.feature:4 1 scenario (1 failed) 3 steps (1 passed, 1 failed, 1 skipped)

behat.yml: default: extensions: Laracasts\Behat: # env_path: .env.behat Behat\MinkExtension: default_session: laravel base_url: localhost:8000 laravel: ~

+0

Fataler Fehler, weil das Element nicht gefunden wird und der findButton gibt null zurück und Sie versuchen, auf Null zu drücken. Verwenden Sie eine Wartebedingung, um auf das Element zu warten, das die Ausnahme auslöst, wenn das Element nicht gefunden wird. hast du versucht $ this-> getSession() -> getPage() -> pressButton ('yourButton'); ? – lauda

Antwort

1

Ich reparierte es mit 2 Schritten: 1. Einstellung APP_KEY Parameter in .env und .env.behat Dateien 2. Fixing FeatureContent-Datei wie folgt:

/** 
* @When I press the :arg1 
*/ 
public function iPressThe($arg1) 
{ 
    $element=$this->getSession()->getPage()->find('named', array('id_or_name', $arg1)); 
    $element->press(); 
} 
0

Ist die PHP Docblock über Ihre benutzerdefinierten FeatureContext Methoden nicht Behat zu analysieren?

@When I press the :submit sieht aus wie seine Verwendung jQuery-Selektor-Syntax, die Behat nicht verwendet werden kann oder zu verwenden. Sehen Sie sich ähnliche Beispiele in der Basisklasse FeatureContext an.

+0

es ist Standart Behat Syntax http://docs.behat.org/en/v3.0/guides/4.contexts.html – Olga