选项“setThrowExceptionOnScriptError(false)”在HtmlUnit中不起作用!为什么? (JAVA)

时间:2014-05-14 15:44:55

标签: exception htmlunit ignore

我在一个主题中的问题。 /我使用的是JDK + NetBeans /。所以,我从http://sourceforge.net/projects/htmlunit/files/htmlunit/下载HtmlUnit 2.9-2.14之间的任何版本,没有人不能使用这个功能。例如我的代码(java):

.....
import com.gargoylesoftware.htmlunit.AlertHandler;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.ScriptPreProcessor;
import com.gargoylesoftware.htmlunit.ScriptResult;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine;
.....
.....

 public static void main(String[] args) throws Exception {
     WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);

     webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
     webClient.getOptions().setThrowExceptionOnScriptError(false);
     webClient.getOptions().setPrintContentOnFailingStatusCode(false);

     HtmlPage page = webClient.getPage("file:///D:/WebRoot/tmp2/test.html");

     webClient.closeAllWindows();


 }

和test.html:

<html>
<head>
</head>
<body>
    <script>
    VKVolumeDown();
    alert("Hello");
    </script>
</body>
</html>

...我得到了脚本异常:

INFO:捕获脚本异常 ======= EXCEPTION START ======== EcmaError:lineNumber = [82] column = [0] lineSource = [] name = [ReferenceError] sourceName = [文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12) )] message = [ReferenceError:“VKVolumeDown”未定义。 (文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12)#82)] com.gargoylesoftware.htmlunit.ScriptException:ReferenceError:未定义“VKVolumeDown”。 (文件中的脚本:/ D:/WebRoot/tmp2/test.html from(7,11)to(24,12)#82)     在com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine $ HtmlUnitContextAction.run(JavaScriptEngine.java:689)     at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:620)

.....

并且“警告(”你好“);”不执行:(。但是为什么我使用“webClient.getOptions()。setThrowExceptionOnScriptError(false);”选项???和函数调用异常“VKVolumeDown()”必须被忽略!?这让我很困惑。帮助我请,这对我来说非常重要。谢谢。

2 个答案:

答案 0 :(得分:2)

感谢您的快速反应,Mosty Mostacho。据我了解:在JavaScript代码中,类似构造“try {} catch(err){}”不会在HtmlUnit工具中发布。我的GENERAL任务是遍历所有JavaScript代码(从开始到结束)并在可能的情况下执行所有构造。我在try {} catch(err){}块中看到包含每个JavaScript构造的变体,但它不是那么优雅。也许谁提出任何变种?

答案 1 :(得分:0)

那里抛出了一个JavaScript异常。这意味着HTML代码中有一些HTMLUnit(Rhino)不喜欢的东西。您首先应该明白,不抛出异常不会修复JS代码中的错误(如果有的话)。因此,如果该问题不允许您执行操作,隐藏或显示操作,则仍然不允许您执行操作。

话虽如此,setThrowExceptionOnScriptError方法确定您是否希望getPage将JS代码中检测到的不可避免的异常转发给您的应用程序。换句话说,如果你想抛出异常,那么你很可能需要在你的应用程序中包含getPage方法的try-catch-finally块。

解决方案:修复您的JS代码。