Ich bin Anfänger im Test, sowohl im Unit Test als auch im UI Test
Ich versuche, einen UI-Test für meine Anmeldeseite mit folgendem Code zu erstellen:
%Vor%Aber dieser Code gibt den folgenden Fehler zurück:
%Vor% Wo Element $("#numeroUsuario")
existiert. Was habe ich falsch gemacht?
Ziemlich sicher, dass Sie in einer page.evaluate
-Umgebung nichts aus dem Phantom-Skript referenzieren können.
In Ihrem Fall könnten Sie tatsächlich mehrere Evaluierungsaufrufe haben:
%Vor%Die Dokumentation sagt Folgendes über den Seitenkontext (Hervorhebung von mir):
Die Ausführung ist sandboxed , die Webseite hat keinen Zugriff auf das
phantom
-Objekt und kann ihre eigene Einstellung nicht testen .
Dies bedeutet, dass auf Variablen, die außerhalb der Callback-Funktion page.evaluate()
definiert sind, nicht zugegriffen werden kann. Dies bedeutet auch, dass sich this
auf das Objekt window
bezieht.
Sie können den page.evaluate()
-Aufruf natürlich in mehrere Aufrufe aufteilen und verschieben Sie die Aufrufe, die äußere Variablen verwenden, zwischen den page.evaluate()
-Anrufen wie Platinum Azure zeigte , aber dies funktioniert nicht, wenn Sie eine PhantomJS-Funktion innerhalb eines Callbacks innerhalb des page.evaluate()
-Rückrufs aufrufen möchten.
Die Lösung wäre, das window.callPhantom
und page.onCallback
Paar zu verwenden. Dies ist ideal für asynchrone Funktionen:
Der Ausgang könnte die zuvor ausgelöste Renderoperation stören. Es ist sicherlich möglich, den Ausgang in diesem Fall um eine bestimmte Zeit wie etwa eine halbe Sekunde zu verzögern:
%Vor% Außerdem ist es nicht möglich, das Objekt page
in den Seitenkontext zu übergeben, da nur serialisierbare Objekte übergeben werden können:
Hinweis: Die Argumente und der Rückgabewert für die
evaluate
-Funktion müssen ein einfaches primitives Objekt sein. Die Faustregel: Wenn es über JSON serialisiert werden kann, ist es in Ordnung.Verschlüsse, Funktionen, DOM-Knoten usw. funktionieren nicht !
Tags und Links javascript phantomjs