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