2016-07-14 32 views
0

Ich benutze watir-webdriver und rspec, um Assertions zu schreiben. Ich stoße auf einige Probleme, die Assertionen auf Elementen eines neuen Fensters laufen lassen.
Dies ist meine Methode, die ich benutze:RSpec Assertions auf neues Fenster

def open_window 
    foobar = @browser.window(:title, 'Foo View') 
    return foobar 
end 

Dies ist, wie ich meine spec schreibe:

describe 'testing a new window' do 
    it 'opens a new window' do 
     open_window.use 
     sleep 2 # hackey way of getting it to work so far 
    end 
    it 'sees elements on page' do 
     # code for expectations of elements 
     # Several more it blocks 
    end 
end 

Was geschieht: Wenn ich nicht für eine unbestimmte Menge in einem sleep Befehl setzen von Es scheint, als würde sich das Fenster schließen, bevor es alle Assertionen durchlaufen kann. Gibt es eine Art von wait, die angewendet werden kann, um das neue Fenster durch die gesamte Spezifikation offen zu halten?

+1

Ihre Web-Anwendung wird einen Browser öffnen und dann nach kurzer Zeit schließen ? Und Sie möchten alle Ihre Tests ausführen, bevor es schließt? – titusfortner

+0

@titsfortner, ja - ich suche nach den Assertions auf dem Fenster, das es öffnet – kmancusi

+0

@kmancusi, der das neue Fenster schließt? Ist es die Anwendung, die Sie testen, oder sagen Sie Watir, sie zu schließen? Es wäre ziemlich ungewöhnlich für Watir, das Fenster zufällig zu schließen. Sind Sie sicher, dass einer Ihrer Tests nicht zur Schließung führt? Ist es immer die gleiche Reihe von Tests, die vergehen, bevor das Fenster schließt? –

Antwort

0

einige Refactoring Did und es ist jetzt richtig arbeiten - im Wesentlichen war es eine Frage der Einstellung etwas entlang der Linien zu sagen, von #when_present.use

0

Kann noch nicht kommentieren.

Wenn das Fenster verfügbar ist, wenn Sie keine Aktionen auf der Seite ausführen, schieben Sie einfach den gesamten Inhalt in eine Instanzvariable, bevor sie geschlossen wird, und führen Sie dann Ihre Behauptungen dagegen aus?

Nicht ideal, aber es könnte funktionieren.