Selenium Test (junit) зависает, как только тест открывает новое окно

Проблема заключается в том, что когда новое окно запускает тест, он зависает после строки waitForPageToLoad (3000) и, наконец, истечет время ожидания. Как только тест зависает, если я вручную запускаю какое-то событие в родительском окне, тест начинает выполняться нормально. Итак, в качестве решения я попытался добавить код, который выбирает родительское окно и запускает какое-то событие. Но этот код вообще не работает. Если бы кто-нибудь мог указать, где я что-то упускаю, или указать на мой неправильный подход.

Шаги, которые я выполнил:

  1. Щелкните ссылку, которая откроет новое окно (здесь link=3018).

  2. Как только открывается новое window2, никакие дальнейшие действия не выполняются автоматически, и тест просто зависает до истечения времени ожидания, после чего просто выдается исключение времени ожидания.

  3. Вручную активировать событие (click link=outbox) в родительском окне1 до истечения времени ожидания.

  4. Тест начинает выполняться в обычном режиме и завершается успешно.

Фрагмент кода (который отлично работает после ручного запуска события в родительском окне):

            selenium.click("link=Last");
            selenium.waitForPageToLoad("30000");
            selenium.click("link=3018");
            selenium.waitForPageToLoad("30000");              
            selenium.selectWindow("window2");
            selenium.selectFrame("relative=up");
            selenium.click("687c55");
            selenium.waitForPageToLoad("30000");
            assertEquals("window2", selenium.getTitle());
            selenium.close();

Фрагмент кода (который не работает даже после добавления кода для выбора окна и активации события в родительском окне):

            selenium.click("link=Last");
            selenium.waitForPageToLoad("30000");
            selenium.click("link=3018");
            selenium.waitForPageToLoad("30000");
            selenium.selectWindow("window1");              
            selenium.click("link=Outbox");
            selenium.waitForPageToLoad("30000");
            selenium.selectWindow("window2");
            selenium.selectFrame("relative=up");
            selenium.click("687c55");
            selenium.waitForPageToLoad("30000");
            assertEquals("window2", selenium.getTitle());
            selenium.close();

Я не могу найти причину, по которой мой код все еще не работает после добавления кода для выбора родительского окна и запуска события щелчка. Он по-прежнему просто зависает и выдает исключение по истечении времени ожидания. :(

Есть ли ошибка при обработке всплывающих окон селеном? Хотел бы получить какие-либо предложения относительно модификации моего подхода к обработке всплывающих окон в селене.


person Vral    schedule 27.07.2011    source источник


Ответы (1)


Selenium RC отлично справляется с всплывающими окнами. Многие наши тесты используют их. Вы не даете понять, какая команда истекает, но я предполагаю, что это либо selectWindow("window2"), либо selectFrame("relative=up").

Если первое, вы, вероятно, получили неправильное имя окна - вы должны использовать то же значение, что и в window.open(url, name, ...).

Если последнее, то есть ли во всплывающем окне несколько фреймов? На самом деле, теперь, когда я думаю об этом, это, вероятно, неудачная команда, так как даже в многокадровом окне Selenium начинает фокусироваться на самом верхнем кадре, поэтому "relative=up" не будет работать.

person Ross Patterson    schedule 28.07.2011
comment
ну как я писал (шаг 1 и шаг 2) скрипт зависает сразу после выполнения selenium.click(link=3018) и selenium.waitForPageToLoad(30000) в результате чего новое окно успешно открывается но дальше автоматики не получается из-за зависания. Как только я запущу какое-то событие в окне1 после зависания, все снова автоматизируется. Спасибо - person Vral; 29.07.2011
comment
Ну, тогда это твоя проблема. Если click() - это то, что открывает окно, Selenium никогда не увидит, как исходное окно загружает страницу - это происходит в ДРУГОМ окне. Ваш selectWindow() должен быть между click() и waitForPageToLoad(). Возможно, вам придется подождать, пока он появится, но это другая тема. - person Ross Patterson; 29.07.2011