Der Befehl "Winkelmesser warten" kann nicht auf das Bootstarp-Modal warten

9

Szenario: Immer wenn sich ein Benutzer mit falschen Anmeldeinformationen anmeldet, wird für 1-2 Sekunden ein Bootstrap-Modal mit der Meldung "sorry, incorrect credentials" angezeigt. Unten ist das HTML des Modals.

%Vor%

Ich muss überprüfen, ob der erwartete Fehlertext dem tatsächlichen Fehlertext entspricht.

Mein Code

PageObject.js

%Vor%

Spec.js

%Vor%

Ausgabe

  

Nachricht:       Erwartet "Übereinstimmungen" Entschuldigung, ungültige Anmeldedaten! ".

Ich weiß nicht, warum das Warten nicht funktioniert. Jede Hilfe wird sehr geschätzt.

    
hello_abhishek 24.01.2017, 13:14
quelle

2 Antworten

1

Dies ist die Antwort von pittgoose als Teil von Ссылка . Ich dachte nur, hier zu teilen

Ok, bevor jeder webdriver action progractor browser.waitForAngular () ausführt, der darauf wartet, dass alle eckigen Skripte ausgeführt werden, bevor die nächste Aktion ausgeführt wird. In diesem Fall glaube ich, dass der Winkelmesser darauf wartet, dass das Popup-Modal verschwindet, bevor es seine Suche durchführt.

Außerdem habe ich gerade meine Theorie bewiesen, denn als ich browser.waitForAngularEnabled (false) vor dem browser.wait (...) hinzufügte, wurde der Test bestanden. Ex:

%Vor%

Dies wäre kein Problem mit Selenium Webdriver API, da es nicht darauf wartet, dass Angular geladen wird.

    
hello_abhishek 03.02.2017, 09:13
quelle
2

Ich habe die rootCause des Problems gefunden, nachdem ich Ihre [app] angeschaut habe. Das Fehlermodal, nach dem Sie suchen, existiert immer in dom - Das bedeutet, dass isPresent() immer ein True zurückgibt. Aber es ist nur für 1 oder 2 Sekunden bei ungültiger Eingabe sichtbar - Das heißt isDisplayed() wird true für diese wenigen Sekunden zurückgeben

Der Nebeneffekt davon ist der Rückgabewert von getText() . Es gibt nur sichtbaren inneren Text zurück. Überprüfen Sie den folgenden Auszug aus der offiziellen Dokumentation

  

Erhalte den sichtbaren inneren Text dieses Elements, einschließlich der Unterelemente,   ohne führende oder nachfolgende Leerzeichen. Sichtbare Elemente sind nicht   durch CSS versteckt.

Deshalb sehen Sie einen leeren Wert von getText()

Ich schlage einen Workaround vor, bei dem Sie den inneren Text nach browser.executeScript()

extrahieren

Ersetze return errorModal.getText() durch return browser.executeScript('return arguments[0].textContent',errorModal) und du solltest alles gut sein

Lassen Sie mich wissen, ob das funktioniert

    
AdityaReddy 29.01.2017 16:04
quelle