In Geb, was ist der Unterschied zwischen den angezeigten und Gegenwart?
Ich Schreibe funktionelle tests und den Umgang mit einem modal-Fenster, das ein-und ausblendet.
Was ist der Unterschied zwischen den angezeigten und Gegenwart?
Ich habe zum Beispiel:
settingsModule.container.displayed and settingsModule.container.present
wo settingsModule stellt mein modales Fenster.
Beim testen mein modales Fenster (modal von Twitter bootstrap), ich in der Regel tun Sie dies:
def "should do ... "() {
setup:
topMenu.openSettingsModal()
expect:
settingsModule.timeZone.value() == "Asia/Hong_Kong"
cleanup:
settingsModule.closeSettingsModal()
}
def "should save the time zone"() {
setup:
topMenu.openSettingsModal()
settingsModule.timeZone = "Japan"
when:
settingsModule.saveSettings()
then:
settingsModule.alertSuccess.size() == 1
settingsModule.alertSuccess.text() == "Settings updated"
when:
settingsModule.saveSettings()
then:
settingsModule.alertSuccess.size() == 1
cleanup:
settingsModule.closeSettingsModal()
}
und auf und auf. In meinen Modulen habe ich:
void openSettingsModal() {
username.click()
settingsLink.click()
}
void closeSettingsModal() {
form.cancel().click()
}
Ich immer wieder Klagen: "Element angezeigt werden soll, klicken Sie auf".
In meinem openSettingsModal und closeSettingsModal, ich habe versucht, viele Kombination von waitFor-mit Zeitintervall und mit vorhanden oder nicht ... es Kann nicht herausfinden.
Alle Zeiger wäre sehr dankbar. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der wesentliche Unterschied ist, dass die derzeit wäre zu überprüfen, daß es ein element in Ihrem DOM, in der Erwägung, dass angezeigt Prüfungen auf die Sichtbarkeit dieses Elements.
Denken Sie daran, dass webdriver simuliert die tatsächliche Erfahrung eines Benutzers mit Hilfe und auf der website mithilfe einer Maus, so dass, wenn das element nicht sichtbar ist, werden Sie nicht in der Lage, klicken Sie auf es.
Frage ich mich, ob Ihr Problem hat zu tun mit settingsLink nicht in den DOM, wenn die Seite zuerst geladen wird. Wenn Sie warten, dass sich ein dialog-popup und einen link auf Leben in diesem dialog, dann wollen Sie wahrscheinlich etwas wie
Ihre waitfor sollte so Aussehen wie
Ich würde stick mit dem Buch geb Konventionen und verwenden nur angezeigt, alle die Zeit.
Geb Handbuch - Ermittlung der Sichtbarkeit
Vielen Dank für Ihre Antwort. Ich war tatsächlich in der Lage zu lösen mein Problem.
Das problem war, dass das modale Fenster hatte eine animation von 500ms. Öffnen und schließen der Fenster mehrmals in meinen tests gemacht, Sie gelingen/scheitern uneinheitlich.
Was ich am Ende tun, ist Einhaken der die "gezeigt" - event zur Verfügung gestellt, die von dem plugin. Ich landete hinzufügen "angezeigt" - Klasse, um den modal und überprüfen Sie es jede 100ms während 1s.
Als eine Randnotiz, wurden die tests Versagen in Chrome und Firefox ABER waren vorbei im IE!! Ich vermute, dass da der IE 8 nicht unterstützt Animationen, dass meine tests waren vorbei.
Es ist alles gut jetzt.
Ich hoffe es wird jemandem helfen, eines Tages!
isDisplayed()
Funktion wie sowaitFor (1, 0.1) { $("#settingsModal").isDisplayed() }
Wo wir können
displayed
?Wenn ein bestimmtes element, das Sie entfernen oder löschen, wenn es noch da ist, im DOM und wird nicht angezeigt-Seite, die Sie verwenden können, behaupten
thatelement.displayed == false
die machen sicher, dass das element nicht auf der Seite angezeigt (aber immer noch ist es in DOM)Wo wir können
present
?In das gleiche Beispiel wie oben, nach dem entfernen,wenn das element nicht gefunden am DOM verwenden ,sollten Sie das Geschenk für die überprüfung
Hoffe, Sie verstehen....
Hinzufügen, um die oben genannten, gegenwärtig nimmt mehr Zeit in die Skript-Ausführung