2016-05-16 18 views
0

Nach dem Hinzufügen einiger Eingaben und Drücken einer Schaltfläche auf der Zielseite wird ein JS-Skript ausgeführt, das (unter anderem) einen Text auf der Seite anzeigt .

Die Zeile "$ I-> see" ist der allerletzte Teil eines längeren Tests, der bis zu diesem Zeitpunkt erfolgreich war.

  • dreifach überprüfte Namens-, Syntax- oder Rechtschreibfehler;
  • versucht, mit CSS und XPath zum Text;
  • versucht mit Locator (aber fehlgeschlagen kläglich wegen nicht genau wissen, wie man es mit Webdriver einrichten);

Der Fehler, den ich immer im Terminal bekommen ist:

Element befindet sich entweder mit Namen, CSS oder XPath-Element mit nicht gefunden.

Webseite Absatz Teil:

<div class="doc-remote-add" style="background-color: rgb(250, 255, 189); border-color: rgb(247, 218, 56);"> 
    <b>Important Delivery Info</b> 
    <br/> 
    The text I am searching for with codeception is here (no, there is no <p>). 
</div> 

Wenn nichts anderes, einen anständigen Locator Konfigurationsplan jemand schreiben kann? Die use \Codeception\Util\Locator; von der offiziellen Seite schneidet nicht wirklich ab.

Antwort

0

Danke, Sergey, aber ich war in der Lage eine viel einfachere Lösung zu finden.

Tatsächlich bestand das Hauptproblem darin, dass der Test sofort nach dem Text suchte. Der einfachste und eleganteste Weg, dies zu lösen, ist ein $ I-> wait(); vor dem siehe Befehl, so kommt es wie diese

/* ... 
rest of test 
... */ 
$I->wait(3); 
$I->see('text i wanna see'); 
0

können Sie versuchen, Element auf Ausnahme von DOM erneut auswählen:

try { 
     $I->seeElement($selector); 
    } catch (\Facebook\WebDriver\Exception\StaleElementReferenceException $e) { 
     $selector = <reselect_element_from_DOM>; 
     $I->seeElement($selector); 
    } 
0

Sie diese Methode in diesem Fall verwendet werden kann:

$I->waitForElement($element, $timeout = null); 

Methode wartet, bis das Element auf der Seite angezeigt wird.