2008-09-19 14 views
20

Wir laufen Selenium Regressionstests gegen unsere bestehende Code-Basis, und bestimmte Bildschirme in unseren Web-App Verwendung von Pop-ups für Zwischenschritte.Handhabung Browser-Pop-up-Fenster mit Selen

Derzeit verwenden wir die Befehle im Test:

// force new window to open at this point - so we can select it later 
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')"); 
selenium().click("//input[@value='Submit']"); 
selenium().waitForPopUp("enquiryPopup", getWaitTime()); 
selenium().selectWindow("enquiryPopup"); 

... die die meiste Zeit funktioniert. Gelegentlich wird der Test auf der waitForPopUp() Linie nicht mit

com.thoughtworks.selenium.SeleniumException: Permission denied 

Kann jemand eine bessere, zuverlässige Methode vorschlagen?

Auch wir in erster Linie diese Tests auf IE6 und 7.

+2

Was zum Teufel ist es mit diesem Thread? Es gibt 5 verschiedene Leute unten versuchen, es zu entführen! – ryeguy

Antwort

3

Es funktioniert !! Nur um es den Leuten zu erleichtern, die selenese bevorzugen.

Dieser arbeitete für mich IE7 (Normalbetrieb).

Was für eine verdammte Hektik. Danke dem Spaghetti-Monster im Himmel für SO oder es gibt keine Möglichkeit, dass ich das im IE funktionierte.

+0

Dies funktioniert nicht für mich, wenn ich windowFocus auf den zuletzt ausgegebenen Befehl verschiebe. Es macht keinen Sinn, dass es vor dem waitForPopUp ist, oder? –

1

laufen Wenn Sie in * iehta Modus ausgeführt werden dann werden Sie in einigen Pannen hier und dort laufen. Wir betreiben Selenium bei meiner Arbeit und es scheint viele Probleme mit IE und AJAX zu geben.

aber es klingt wie das Problem, das Sie in laufen ist eine, wo Selen eine Komponente in einem anderen Fenster zuzugreifen versuchen, bevor es vollständig geladen werden. Ich bin mir nicht sicher, wofür der Standard-Timeout-Bereich eingestellt ist, aber Sie können versuchen, ihn auf 60 (60000ms) Sekunden zu erhöhen, um das Problem zu umgehen.

Anders als das würde ich vorschlagen, die Tests in Firefox (mit * Chrom) ausgeführt wird, da es viel zuverlässigere Ergebnisse produziert, aber manchmal ist es einfach nicht möglich, da Geschäftsanforderungen.

+0

Oh glaub mir, ich wünschte, wir könnten es einfach in Firefox ausführen! Aber 99% unserer Benutzer sind auf IE, das ist die Priorität für das Testen ... Wir verwenden * iexplore, nicht * iehta auch. Mir sind die Unterschiede nicht bewusst? – brasskazoo

+0

* iehta und * chrome erlauben https-Unterstützung. Auf diese Weise müssen Sie sich nicht um die Probleme kümmern, die durch Zertifikate entstehen. – Josh

0

ich trialled nur ein weiteres Selen Funktion hinzugefügt, windowFocus():

// force new window to open at this point - so we can select it later 
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')"); 
selenium().click("//input[@value='Submit']"); 
selenium().windowFocus("enquiryPopup"); 
selenium().waitForPopUp("enquiryPopup", getWaitTime()); 
selenium().selectWindow("enquiryPopup"); 

Der Test gelang es, wenn ich es lokal lief, aber nur mit denen alle Methodenaufrufe - create/Fokus/wait/select.

Ich bin über die Build-Server laufen alle Tests zu lassen, und wenn das auch gelingt, werde ich sein ... aus ihm eine Bibliotheksfunktion macht!

+0

Bitte lassen Sie uns wissen, ob es funktioniert hat! – mcherm

+0

Für den Moment hat es funktioniert, also werde ich es über alle Tests mit Pop-ups (wir bewegen uns schließlich zu Leuchtkästen) erweitern. – brasskazoo

+0

Das ist sehr hilfreich! Ich kann meine Testarbeit machen. Vielen Dank! – wen

-1

versuchen, einige Warte Aussagen rund um die Anrufe hinzufügen, die Sie Probleme verursachen.

Ich habe die gleichen Fehler hatte vor und der einzige Weg, ich zuverlässig lösen sie, indem sie Anrufe zu System.Threading.Thread.Sleep (5000) war in der Lage war ..

0

Ich musste einen iframe in einem Popup-Fenster auswählen und ein Formular ausfüllen. Ich hatte Probleme mit dem SelectWindow-Cmd, in dem Selen meinen Iframe nicht finden konnte, also entfernte ich den Befehl.

Diese Selenese arbeitete gut für mich (wo der iframe Titel und id = account_frame):

<tr> 
    <td>click</td> 
    <td>//a[@class='item_add']</td> 
    <td></td> 
</tr> 
<tr> 
    <td>windowFocus</td> 
    <td>account_frame</td> 
    <td></td> 
</tr> 
<tr> 
    <td>waitForPopUp</td> 
    <td>account_frame</td> 
    <td>10000</td> 
</tr>