HtmlUnit останавливает выполнение JavaScript после window.open - PullRequest
0 голосов
/ 26 августа 2010

Я недавно обновил HTMLUnit 2.4 до 2.5 (мы хотели бы перейти на последнюю версию, но есть много кода для рефакторинга из-за устаревших API). У меня сейчас проблема с некоторым JavaScript, который открывает окно.

Тестируемая страница представляет собой «Пожалуйста, подождите, пока загружается экран» для отчетов. Страница открывает новое окно, а затем перенаправляет обратно на страницу, на которой изначально была запущена печать.

Так что JavaScript выглядит примерно так:

window.open(url,'report_window');
document.location.href  = original_url;

С HtmlUnit 2.4 скрипт продолжит выполнение, и если я возьму оригинальный объект Window, он выполнит перенаправление. Однако после обновления до HtmlUnit 2.5 исходное окно все еще находится на странице «Пожалуйста, подождите» - перенаправление никогда не выполняется. Похоже, что JavaScript прекратил выполнение после вызова window.open.

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

Кто-нибудь знает о такой проблеме и о возможных обходных путях? Мы должны остаться на HtmlUnit 2.5 из-за совместимости с jQuery.

1 Ответ

0 голосов
/ 26 августа 2010

Мне удалось решить эту проблему, удалив объект CurrentWindowTracker из прослушивателей веб-окон объекта WebClient.К сожалению, это поле полностью инкапсулировано, поэтому мне пришлось извлечь его с помощью отражения.

        Field windowListeners = WebClient.class
                .getDeclaredField("webWindowListeners_");
        windowListeners.setAccessible(true);
        Collection webWindowListeners = (Collection) windowListeners
                .get(webClient);
        webWindowListeners.clear();
...