2016-07-05 18 views
3

Gibt es eine Möglichkeit, zuverlässig zu warten, dass Seiten geladen werden, wenn Behat mit Mink den Selenium2Driver verwendet?Behat + Selen 2 Warten auf Seite zu laden

Ich habe einige Legacy-Tests geerbt, die wie folgt warten:

Background: 
    Given I am on "http://test.example.com" 
    And I wait for "20000" 
    Given I click on the element with css selector ".button1" 
    And I wait for "30000" 
    Given I click on the element with css selector ".button2" 
    And I wait for "30000" 
    Given I click on the element with css selector ".button1" 
    And I wait for "10000" 

das heißt nur diese einzige Test dauert 1 Minute 30 Sekunden.

Was ich tun möchte, ist eine generische Art zu warten, bis der vorherige Klick zum Laden der Seite führt, ohne jedes Mal eine große Zeit warten zu müssen.

Alle Vorschläge, die ich zum Warten auf das Laden der Seite sehen kann, beziehen sich alle auf die Überprüfung, dass ein bestimmtes Seitenelement geladen ist.

Allerdings laufen diese Tests gegen eine Vielzahl von Legacy-Websites, wo es nicht immer ein Standardelement gibt, das überprüft werden kann, um anwesend zu sein, also hoffe ich, eine allgemeinere Methode zu verwenden.

Antwort

4

Sie können eine Warte Methode mit javasccript Zustand wie verwenden:

/** 
* @When /^wait for the page to be loaded$/ 
*/ 
public function waitForThePageToBeLoaded() 
{ 
    $this->getSession()->wait(10000, "document.readyState === 'complete'"); 
} 

Eine weitere gute Praxis ist es, ein Verfahren zu haben, die für das Element wartet, wenn das Element es kehrt das Element Objekt sonst eine Ausnahme werfen wird gefunden .

Für die Click-Methode können Sie so etwas wie dieses:

$this->waitForElement("css_selector")->click();