Обработка всплывающих окон браузера с помощью Selenium

мы запускаем тесты регрессии Селена против нашей существующей базы кода, и некоторые экраны в нашем веб-приложении используют всплывающие окна для промежуточных шагов.

В настоящее время мы используем команды в тесте:

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

...который работает большую часть времени. Иногда тест будет терпеть неудачу на waitForPopUp() строку с

com.thoughtworks.selenium.SeleniumException: Permission denied

может ли кто-нибудь предложить лучше, больше надежный способ?

кроме того, мы в первую очередь выполнить эти тесты на IE6 и 7.

5 ответов


это работает!! Просто, чтобы сделать его проще для людей, которые предпочитают selenese.

это сработало для меня, используя IE7 (нормальный режим).

что за чертова суета. Спасибо монстру спагетти в небе за это, иначе я бы не получил эту работу в 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>

Если вы работаете в режиме *iehta, то вы собираетесь столкнуться с некоторыми глюками тут и там. Мы запускаем Selenium на моей работе, и, похоже, есть много проблем с IE и AJAX.

тем не менее, похоже, что проблема, с которой вы сталкиваетесь, заключается в том, что Selenium пытается получить доступ к компоненту в другом окне, прежде чем он полностью загрузится. Я не уверен, что ваш выбор тайм-аута по умолчанию, но вы можете попробовать увеличить его до 60 (60000ms) секунд или так, чтобы пройти мимо вопрос.

кроме этого, я бы предложил запустить ваши тесты в Firefox (используя *chrome), поскольку он дает гораздо более надежные результаты, но иногда это просто невозможно из-за бизнес-требований.


Я только что попробовал добавить еще одну функцию Селена,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");

тест удался, когда я запустил его локально, но только со всеми этими вызовами метода - create/focus/wait/select.

Я собираюсь позволить серверу сборки выполнить все тесты, и если это тоже удастся, я сделаю из него библиотечную функцию...!


Мне нужно было выбрать iframe во всплывающем окне и заполнить форму. У меня были проблемы с использованием selectwindow cmd, где selenium не мог найти мой iframe, поэтому я удалил команду.

этот selenese хорошо работал для меня (где заголовок iframe и 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>

попробуйте добавить некоторые операторы ожидания вокруг вызовов, которые вызывают у вас проблемы.

У меня были те же ошибки раньше и единственный способ, которым я смог надежно разрешить их было путем звонков в систему.Нарезка резьбы.Нитка.Сон(5000)..