java - HtmlUnit 属性未定义脚本错误

标签 java javascript html

我正在使用 java HtmlUnit 包提交表单。我能够获取页面并提交表单,但在一个页面上出现 ScriptException 错误。消息是“无法将未定义的属性“禁用”设置为“0””

我认为这可能是由一个 javascript 方法引起的,该方法试图设置一个尚未在表单中声明的​​变量,但我不确定。

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)

最佳答案

这是导致我在正在加载的页面上出现 javascript 错误的原因。 我设置了

webClient.getOptions().setThrowExceptionOnScriptError(false);

但它仍然抛出异常。

解决方案:如果您捕捉到 ScriptException 页面仍然完全加载,您可以继续处理并忽略异常。

失败的 HTML 示例:

<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>

关于java - HtmlUnit 属性未定义脚本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1168258/

相关文章:

java interscect, union, join, distinct 列表与谓词

具有 *ANY* 标准的 Java SQL 准备语句

javascript - Google 图表 - Uncaught Error : not an array

javascript - indexedDB objectStore.get() 总是返回 undefined,尽管在 DB 中有结果

html - 到处都是奇怪的 CSS 间距

java - 在 Selenium WebDriver 中找不到元素时杀死 NoSuchElementException 或任何异常的最快方法

java - 无法从 Java 类中找到 groovy 类

javascript - Vue中父组件向子组件传递数据的方法

javascript - Jquery:如何从选择元素中获取选定的选项

javascript - jQuery 多次触发提交表单事件(我认为)