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





Если вы работаете в режиме * iehta, то тут и там вы столкнетесь с некоторыми сбоями. Мы запускаем Selenium на моей работе, и, похоже, есть много проблем с IE и AJAX.
Однако похоже, что проблема, с которой вы столкнулись, заключается в том, что Selenium пытается получить доступ к компоненту в другом окне, прежде чем он полностью загрузится. Я не уверен, какой у вас диапазон тайм-аута по умолчанию, но вы можете попробовать увеличить его до 60 (60000 мс) секунд или около того, чтобы решить эту проблему.
Помимо этого, я бы предложил запускать ваши тесты в Firefox (с использованием * chrome), поскольку он дает гораздо более надежные результаты, но иногда это просто невозможно из-за бизнес-требований.
О, поверьте мне, я бы хотел просто запустить его в firefox! Но 99% наших пользователей используют IE, так что это приоритет для тестирования ... Мы также используем * iexplore, а не * iehta. Я не в курсе отличий?
* iehta и * chrome позволяют поддерживать https. Таким образом, вам не придется беспокоиться о проблемах, связанных с сертификатами.
Я только что попробовал добавить еще одну функцию селена, 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.
Я собираюсь позволить серверу сборки запускать все тесты, и если это тоже удастся, я сделаю из него библиотечную функцию ...!
На данный момент он работает, поэтому я собираюсь распространить его на все тесты, используя всплывающие окна (в конечном итоге мы переходим к лайтбоксу).
Попробуйте добавить несколько операторов ожидания к вызовам, которые вызывают у вас проблемы.
У меня были такие же ошибки раньше, и единственный способ решить их с помощью надежно - это вызвать System.Threading.Thread.Sleep (5000) ..
Оно работает!! Просто чтобы облегчить людям, которые предпочитают селене.
Это сработало для меня с использованием 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>
У меня это не сработает, если я не переместу windowFocus к последней выданной команде. Нет никакого смысла делать это до waitForPopUp, не так ли?
Мне нужно было выбрать iframe во всплывающем окне и заполнить форму. У меня возникли проблемы с использованием cmd selectWindow, где 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>
Что, черт возьми, с этой веткой? Внизу пять разных людей пытаются его угнать!