2013-01-24 6 views
13

Folgen Sie dem unten Teil des Codes: Einige Male die nächste Seite zu dem Benutzernamen und Passwort muss gesetzt durch das SkriptWie aktualisiert man eine Seite im Browser mit selen-webdriver?

driver.get "https://example.com/" 

element = driver.find_element :name => "username" 
element.send_keys "*****" 
element = driver.find_element :name => "password" 
element.send_keys "*****" 
element.submit 

Jetzt Punkt ist, wenn die driver die URL im Browser geöffnet, nicht kommen - was dazu führt, dass das Skript fehlschlägt. Einige intermediate Seite kommt uns bitten, klicken Sie auf "Wiederholen" oder "Aktualisieren Sie die Seite". Daher stoppte das Skript, wenn ein solcher Fall auftrat, die Ausführung, da das erwähnte Element nicht erhielt.

Gibt es eine Möglichkeit, diese Zwischenseite mit "Schlaf" zu aktualisieren, bevor Sie auf die Seite "Anmelden" gehen, damit das Skript auf einmal ausgeführt werden kann?

+4

'page.driver.browser.navigate.refresh' wenn Capybara mit – Nakilon

+3

Für Capybara Ich finde 'visit current_path' funktioniert besser. – Tommyixi

Antwort

11

Sie die Navigation#refresh Methode verwenden können:

driver.navigate.refresh 
+0

Was "navigate" Befehl tut? warum nicht nur 'driver.refresh'? – CodeLover

+0

"Navigieren" gibt Ihnen Zugriff auf die Navigationsmethoden; ähnlich wie Sie 'driver.navigate.to' machen würden. Warum nicht einfach 'driver.refresh' - das ist eine Frage für die Entwickler der Ruby-Bindungen (dh es ist nur eine Vorliebe für die Gestaltung der API). –

+1

bekomme 'undefinierte lokale Variable oder Methode' Treiber 'für # ' –

1

Bearbeiten: meine ursprüngliche Antwort angenommen, Capybara wurde verwendet.

Sie können einfach driver.get auf der Seite erneut zu aktualisieren. Es gibt keinen Unterschied zwischen dem Klicken auf die Aktualisierungsschaltfläche in einem Browser und dem Eingeben der gleichen URL, um die Seite erneut zu laden. Daher ist driver.get für dieses Verhalten ausreichend.

4

In Fällen wie diesem, habe ich einige Code geschrieben für die Existenz des Eingabefeldes zu überprüfen. Wenn es nicht existiert, dann aktualisiere.

driver.refresh() 
+0

Ich glaube nicht, dass dies für die Ruby-Bindungen funktioniert (obwohl es für einige der anderen Bindungen funktionieren könnte). –

8

Für Capybara, empfehle ich

page.evaluate_script("window.location.reload()") 

Dies funktioniert auch mit Poltergeist/PhantomJS

10

Wie in einem Kommentar von @Nakilon erwähnt, mit nicht-Poltergeist Treiber in Capybara verwenden die folgenden, um die aktuelle Seite zu aktualisieren:

page.driver.browser.navigate.refresh 

Aber für eine universelle Lösung, Verwendung:

page.evaluate_script 'window.location.reload()'