Подтвердить что ты не робот

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

Мы проводим тесты регрессии 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.

4b9b3361

Ответ 1

Это работает!! Просто, чтобы облегчить людям, которые предпочитают селене.

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

Какая шутка. Поблагодарите монстра спагетти в небе для SO или нет никакого способа, которым я получил бы эту работу в 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>

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

У меня были те же ошибки раньше, и единственным способом, с помощью которого я смог надежно разрешить их, было обращение к System.Threading.Thread.Sleep(5000)..