HtmlUnit останавливает выполнение JavaScript после window.open

Я недавно обновился с 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.


person Jason Gritman    schedule 26.08.2010    source источник


Ответы (1)


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

        Field windowListeners = WebClient.class
                .getDeclaredField("webWindowListeners_");
        windowListeners.setAccessible(true);
        Collection webWindowListeners = (Collection) windowListeners
                .get(webClient);
        webWindowListeners.clear();
person Jason Gritman    schedule 26.08.2010