2013-02-13 5 views
12

Ich versuche meine Backbone.js Webanwendung mit Selenium IDE zu testen.Wie öffne ich eine URL mit einem Hash mit Selenium?

Selen kann die ursprüngliche URL meines Testfalls öffnen, solange sie sich in einem neuen Browserfenster befindet - z. open /#/login - aber es tritt eine Zeitüberschreitung auf, wenn versucht wird, nachfolgende URLs zu öffnen.

Es scheint, dass Selen auf ein Ereignis wartet, das gerade nicht ausgelöst wird, wenn sich nur der URL-Hash ändert.

Ich könnte mir vorstellen, das zu jeder Zeit passiert Sie hashchange + Selen verwenden ...

+2

Ich habe das vorgelegt [als Fehler] (http://code.google.com/p/selenium/issues/detail?id=5165&q = anchor & colspec = ID% 20Stars% 20Type% 20Status% 20Priority% 20Milestone% 20Owner% 20Zusammenfassung) an das Selenium-Team. – jabbett

+0

Ich beobachte das gleiche Verhalten, aber trotz des Zeitüberschreitungsfehlers setzt sich mein Skript dann fort –

+0

Als eine Notiz an irgendjemand anderen, der meinen ähnlichen, aber anderen Fall erlebt, konnte ich keine URL in Selen wie https laden: // foo.com # bar'. Selenium ** wird jedoch ** URL-Hashes akzeptieren, wenn auf den Hash ein Schrägstrich folgt, d.h. "https: // foo.com #/bar". –

Antwort

-1

Ein kurzes Update: Wir haben Selenium IDE versuchen, bis zu verwenden, unsere Integrationstests zu schreiben, und verwendet stattdessen die Selenium Python bindings für Selenium Webtreiber.

Mit diesem Ansatz können wir zu einer URL navigieren und dann WebDriverWait verwenden, um eine bestimmte Änderung im DOM zu erkennen, z.

driver = webdriver.Firefox() 
driver.get("/#/login") 
WebDriverWait(driver, 10).until(
    lambda driver: driver.find_element_by_css_selector("form.login").is_displayed()) 
5

In Selenium IDE verwenden Sie einfach den Befehl 'storeEval', zum Beispiel:

Command = storeEval 
Target = window.location.hash='/search/events/birthdays/1' 

storeEval läuft die Javascript "Ziel" Schnipsel zugeordnet. Was Sie dann tun können, ist ein Testfall, der die Startseite mit dem Befehl open (url) öffnet, und der Rest Ihrer Fälle ändert den Hash mit dem Befehl storeEval.

1

Führen Sie dies auf der Konsole des Entwicklertools ->window.location.hash='#abcde'. Es sollte Hash für Sie in der Registerkarte Browser ändern.

JavaScript ausführen durch Selen WebDriver und Java:

((JavascriptExecutor) driver).executeScript("window.location.hash='#abcde'");