it-swarm-eu.dev

Manipulace s vyskakovacími okny prohlížeče pomocí programu Selenium

Spustili jsme regresní testy Selenium proti naší existující kódové základně a některé obrazovky v naší webové aplikaci používají překryvná okna pro přechodné kroky.

V současné době používáme příkazy v testu:

// 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");

... který funguje většinu času . Příležitostně test selže na řádku waitForPopUp()

com.thoughtworks.Selenium.SeleniumException: Permission denied

Může někdo navrhnout lepší, více spolehlivý metodu?

Tyto testy provádíme především na IE6 a 7.

20
brasskazoo

Funguje to!! Jen aby to bylo jednodušší pro lidi, kteří preferují selenese.

To fungovalo pro mě pomocí IE7 (normální režim). 

Co to děsivé zmatky. Děkuji špagety monstrum na obloze pro SO nebo neexistuje žádný způsob, jak bych si to práci v IE.

<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

Pokud používáte v režimu * iehta, pak se budete vracet do některých závad zde a tam. V naší práci provozujeme Selenium a zdá se, že je mnoho problémů s IE a AJAX.

Zní to však, že problém, do kterého narazíte, je ten, kde se Selenium pokouší o přístup ke komponentě v jiném okně, než se úplně načte. Nejsem si jistý, jaký je výchozí rozsah časového limitu nastaven na, ale možná budete chtít zkusit zvýšit na 60 (60000ms) sekund nebo tak dostat kolem problému.

Kromě toho bych doporučil spuštění testů ve Firefoxu (pomocí * chrome), protože produkuje mnohem spolehlivější výsledky, ale někdy to není jednoduché kvůli obchodním požadavkům.

1
Josh

Právě jsem testoval přidání další funkce Selenium, 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");

Test proběhl úspěšně, když jsem běžel lokálně, ale pouze se všemi těmi metodickými voláními - create/focus/wait/select. 

Chystám se nechat sestavovací server spustit všechny testy, a pokud to také uspěje, budu z toho dělat knihovní funkci ...!

0
brasskazoo

Potřeboval jsem vybrat iframe ve vyskakovacím okně a vyplnit formulář. Měl jsem potíže s použitím selectWindow cmd, kde Selenium nemohl najít mé iframe, takže jsem příkaz odstranil.

Tento selenese pracoval dobře pro mě (kde iframe title a 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