Вопрос

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

Это было полезно?

Решение

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

Это сработало для меня, используя 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>

Другие советы

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

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

Помимо этого, я бы предложил проводить тесты в 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 во всплывающем окне и заполнить форму.У меня возникли проблемы с использованием cmd selectWindow, из-за которого селен не смог найти мой 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>

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top