web-dev-qa-db-fra.com

Gestion des fenêtres contextuelles du navigateur avec Selenium

Nous exécutons des tests de régression Selenium sur notre base de code existante et certains écrans de notre application Web utilisent des fenêtres contextuelles pour les étapes intermédiaires.

Actuellement, nous utilisons les commandes du 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");

... qui fonctionne la plupart du temps . Parfois, le test échoue sur la ligne waitForPopUp() avec 

com.thoughtworks.Selenium.SeleniumException: Permission denied

Quelqu'un peut-il suggérer une méthode meilleure, plus fiable ?

En outre, nous exécutons principalement ces tests sur IE6 et 7.

20
brasskazoo

Ça marche!! Juste pour le rendre plus facile pour les gens qui préfèrent le sélénien.

Cela a fonctionné pour moi avec IE7 (mode normal). 

Quel ennui freaking. Remerciez le monstre spaghetti dans le ciel pour SO ou je n’aurais aucun moyen de le faire fonctionner dans 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

Si vous utilisez le mode * iehta, vous rencontrerez des problèmes ici et là. Nous travaillons avec Selenium à mon travail et il semble y avoir beaucoup de problèmes avec IE et AJAX.

Cependant, il semble que le problème que vous rencontrez soit celui dans lequel Selenium tente d'accéder à un composant dans une autre fenêtre avant qu'il ne soit complètement chargé. Je ne suis pas sûr de définir votre délai d'expiration par défaut, mais vous voudrez peut-être essayer de l'augmenter à 60 secondes environ (60000ms) pour résoudre le problème.

En dehors de cela, je vous suggèrerais d'exécuter vos tests dans Firefox (en utilisant * chrome) car cela produirait des résultats beaucoup plus fiables, mais parfois, ce n'est tout simplement pas possible en raison des exigences de l'entreprise.

1
Josh

Je viens de tester l'ajout d'une autre fonction 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");

Le test a réussi lorsque je l'ai exécuté localement, mais uniquement avec tous ces appels de méthodes - create/focus/wait/select. 

Je suis sur le point de laisser le serveur de compilation exécuter tous les tests, et si cela réussit aussi, je vais en faire une bibliothèque ...!

0
brasskazoo

Je devais sélectionner un iframe dans une fenêtre contextuelle et remplir un formulaire. J'ai eu du mal à utiliser le cmd selectWindow où Selenium ne pouvait pas trouver mon iframe, alors j'ai supprimé la commande.

Ce selenese a bien fonctionné pour moi (où le titre iframe et 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