it-swarm.com.de

Umgang mit Browser-Popup-Fenstern mit Selenium

Wir führen Selenium-Regressionstests mit unserer vorhandenen Codebasis durch, und einige Bildschirme in unserer Web-App verwenden Popups für Zwischenschritte.

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 funktioniert meistens . Gelegentlich schlägt der Test in der Zeile waitForPopUp() mit fehl 

com.thoughtworks.Selenium.SeleniumException: Permission denied

Kann jemand eine bessere, mehr zuverlässigere Methode vorschlagen?

Außerdem führen wir diese Tests hauptsächlich auf IE6 und 7 durch.

20
brasskazoo

Es klappt!! Nur um es den Leuten zu erleichtern, die Selenese bevorzugen.

Dies funktionierte für mich mit IE7 (Normalmodus). 

Was für ein verrückter Ärger. Ich danke dem Spaghetti-Monster am Himmel für SO oder es gibt keine Möglichkeit, dass ich das im IE hätte arbeiten lassen.

<tr>
    <td>getEval</td>
    <td>Selenium.browserbot.getCurrentWindow().open('', 'windowName');</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>buttonName</td>
    <td></td>
</tr>
<tr>
    <td>windowFocus</td>
    <td>windowName</td>
    <td></td>
</tr>
<tr>
    <td>waitForPopUp</td>
    <td>windowName</td>
    <td>3000</td>
</tr>
<tr>
    <td>selectWindow</td>
    <td>windowName</td>
    <td></td>
</tr>
3
branchgabriel

Wenn Sie im * iehta-Modus laufen, werden Sie hier und dort auf einige Probleme stoßen. Wir betreiben Selenium in meinem Job und es scheint viele Probleme mit IE und AJAX zu geben.

Es klingt jedoch so, als würde Selenium versuchen, auf eine Komponente in einem anderen Fenster zuzugreifen, bevor diese vollständig geladen wird. Ich bin nicht sicher, wie Ihr Standard-Timeout-Bereich festgelegt ist, aber Sie möchten vielleicht auf 60 (60000 ms) Sekunden erhöhen, um das Problem zu umgehen.

Abgesehen davon würde ich empfehlen, Ihre Tests in Firefox durchzuführen (mit * chrome), da dies viel zuverlässigere Ergebnisse liefert, aber manchmal ist dies aufgrund geschäftlicher Anforderungen einfach nicht möglich.

1
Josh

Ich habe gerade versucht, eine weitere Selenium-Funktion hinzuzufügen, 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 war erfolgreich, wenn ich ihn lokal ausführte, aber nur mit all diesen Methodenaufrufen - create/focus/wait/select. 

Ich lasse den Build-Server alle Tests ausführen, und wenn das auch gelingt, mache ich eine Bibliotheksfunktion daraus ...!

0
brasskazoo

Ich musste einen iframe in einem Popup-Fenster auswählen und ein Formular ausfüllen. Ich hatte Probleme bei der Verwendung des selectWindow-Cmd, bei dem Selenium meinen iframe nicht finden konnte. Daher entfernte ich den Befehl.

Diese Selenese funktionierte gut für mich (wobei der iframe-Titel und die 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>
0
nicholasklick