2010-08-26 7 views
0

J'ai récemment mis à jour de HTMLUnit 2.4 à 2.5 (nous irions pour la dernière version, mais il y a beaucoup de code à refactoriser en raison des API obsolètes). J'ai maintenant un problème avec du JavaScript qui ouvre une fenêtre.HtmlUnit arrête l'exécution de JavaScript après un window.open

La page en cours de test est un écran 'Veuillez patienter lors du chargement' pour les rapports. La page ouvre une nouvelle fenêtre puis redirige vers la page qui a initialement lancé l'impression.

Ainsi, le JavaScript ressemble à quelque chose comme:

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

Avec HtmlUnit 2.4 le script continuerait d'exécuter et si je saisis l'objet de la fenêtre d'origine, il aurait effectué la redirection. Cependant, après la mise à niveau vers HtmlUnit 2.5, la fenêtre d'origine est toujours sur la page 'Please wait' - la redirection n'est jamais exécutée. Il semble que le JavaScript a cessé d'être exécuté après l'appel de window.open.

J'ai confirmé que la page se comporte correctement si je la teste manuellement. J'ai également essayé JavaScript différent après l'appel de window.open pour confirmer que cet appel particulier n'est pas le problème.

Quelqu'un est-il au courant d'un problème comme celui-ci et des solutions de contournement potentielles? Nous devons rester sur HtmlUnit 2.5 en raison de la compatibilité de jQuery.

Répondre

0

J'ai réussi à résoudre ce problème en supprimant l'objet CurrentWindowTracker des écouteurs de fenêtre Web sur l'objet WebClient. Malheureusement, ce champ est complètement encapsulé, donc j'ai dû le récupérer par réflexion.

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