Обработка всплывающих окон браузера с помощью 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.

Что, черт возьми, с этой веткой? Внизу пять разных людей пытаются его угнать!

ryeguy 23.10.2009 01:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
21
1
63 661
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

О, поверьте мне, я бы хотел просто запустить его в firefox! Но 99% наших пользователей используют IE, так что это приоритет для тестирования ... Мы также используем * iexplore, а не * iehta. Я не в курсе отличий?

brasskazoo 19.09.2008 07:18

* iehta и * chrome позволяют поддерживать https. Таким образом, вам не придется беспокоиться о проблемах, связанных с сертификатами.

Josh 19.09.2008 07:48

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

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

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

brasskazoo 09.10.2008 08:01

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

У меня были такие же ошибки раньше, и единственный способ решить их с помощью надежно - это вызвать 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, не так ли?

Chris Noe 29.12.2009 21:26

Мне нужно было выбрать 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>

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