2009-07-22 9 views
3

Je soumets un formulaire en utilisant le package java HtmlUnit. Je suis en mesure d'obtenir des pages et de soumettre des formulaires, mais sur une page, je reçois une erreur ScriptException. Le message est "Impossible de définir la propriété" désactivé "de undefined à" 0 ""Erreur de script de la propriété HtmlUnit non définie

Je pense que cela peut être dû à une méthode javascript qui essaie de définir une variable qui n'a pas été déclarée dans le formulaire mais je ne suis pas sûr.

tempForm = MyPage.getFormByName("menu_form"); 
tempForm.getInputByName("userId").setValueAttribute("myusername"); 
HtmlPage editSubscriberPage = (HtmlPage) 
tempForm.getInputByName("submit_button").click(); 



EcmaError: lineNumber=[824] column=[0] lineSource=[null] name=[TypeError] sourceName=[script in https://labserver.comp.com/mcwebadm/cgi-bin/edit_local.pl?operation=edit&return_address=%2Fmcwebadm%2Fcgi-bin%2Fmenu.pl&selected=2322020c341b11de96c3000423d43f1d from (9, 32) to (840, 15)] message=[TypeError: Cannot set property "disabled" of undefined to "0" (script in https://myserver.company.com/mcwebadm/cgi-bin/edit_local.pl?operation=edit&return_address=%2Fmcwebadm%2Fcgi-bin%2Fmenu.pl&selected=22020c341b11de96c3000423d43f1d from (9, 32) to (840, 15)#824)] 
com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot set property "disabled" of undefined to "0" (script in https://labserver.comp.com/mcwebadm/cgi-bin/edit_local.pl?operation=edit&return_address=%2Fmcwebadm%2Fcgi-bin%2Fmenu.pl&selected=22020c341b11de96c3000423d43f1d from (9, 32) to (840, 15)#824) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:534) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:515) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507) 
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:464) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:992) 
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:164) 
    at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:177) 
    at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:584) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement$2.run(HtmlElement.java:936) 
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:515) 
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:941) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1237) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:183) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:449) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:329) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:354) 
    at com.gargoylesoftware.htmlunit.html.HtmlForm.submit(HtmlForm.java:179) 
    at com.gargoylesoftware.htmlunit.html.HtmlSubmitInput.doClickAction(HtmlSubmitInput.java:82) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1329) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1288) 
    at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1257) 
    at TestOne.run(TestOne.java:77) 
    at TestOne.main(TestOne.java:215) 
+0

Est-ce que l'affichage de la même page dans un navigateur génère une erreur JS? – seth

+0

Je viens de le tester à nouveau et j'ai juste remarqué que la page qui charge a une erreur JS. Est-ce que je peux dire à HtmlUnit de continuer à traiter comme c'est le cas? – Ben

Répondre

3

Cela a provoqué une erreur javascript sur la page en cours de chargement. Je mis les

webClient.getOptions() setThrowExceptionOnScriptError (false).

mais il a quand même lancé l'exception.

SOLUTION: Si vous interceptez l'exception ScriptException, la page est encore entièrement chargée et vous pouvez continuer à traiter et ignorer l'exception.

Exemple de HTML qui échoue:

<html> 
<Head><title>JS Test</title> 
    <script type="text/javascript"> 
     function run_js() 
     { 
       form.myinput.value = "from on body"; 
//    document.myform.myinput.value = "from body"; 
     } 
     </script> 
    </head> 

<body onload="run_js()"> 
    The Body. 
    <form name="myform"> 
     <input name="myinput" type="text"/> 
    </form> 
</body> 
</html> 
0

Pouvez-vous fournir un site Web public à tester? Comme je ne suis pas en mesure de charger le JS dans https://mmlab1msslnx.fmr.com/mcwebadm/cgi-bin/edit_local.pl?operation=edit&return_address=%2Fmcwebadm%2Fcgi-bin%2Fmenu.pl&selected=22020c341b11de96c3000423d43f1d

Veuillez également utiliser la dernière version de HtmlUnit 2.5.

+0

Je ne suis pas en mesure de fournir un test élémentaire public. Je travaille à en créer un. J'ai vérifié et j'utilise la version 2.5. J'espérais que quelqu'un avait vu quelque chose de similaire. – Ben

Questions connexes