在htmlUnit中执行Javascript

在htmlUnit中执行Javascript,javascript,htmlunit,Javascript,Htmlunit,我正在尝试使用htmlUnit执行javascript。在执行javascript之后,我想检查页面是否由于javascript的执行而发生了一些变化。i、 我想比较javascript执行前后的html页面 你知道我该怎么做吗 下面是示例代码,解释了我实际打算做什么 public static void main(String[] args) { final WebClient webClient = new WebClient(); HtmlPage page; t

我正在尝试使用htmlUnit执行javascript。在执行javascript之后,我想检查页面是否由于javascript的执行而发生了一些变化。i、 我想比较javascript执行前后的html页面

你知道我该怎么做吗

下面是示例代码,解释了我实际打算做什么

public static void main(String[] args) {
    final WebClient webClient = new WebClient();

    HtmlPage page;
    try {
        page = webClient
                .getPage("http://www.somepage.com");
        System.out.println(page.asXml());
        System.out.println(page.getByXPath("//script"));

        BufferedInputStream buffer = null;
        // System.out.print("getWebSite " + urlValue + "\n");

        URL url = new URL(
                "http://www.somepage.com/someJS.js");
        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
        buffer = new BufferedInputStream(urlc.getInputStream());

        StringBuilder builder = new StringBuilder();
        int byteRead;
        while ((byteRead = buffer.read()) != -1)
            builder.append((char) byteRead);

        buffer.close();

        ScriptResult result = page.executeJavaScript(builder.toString());
        Object jsResult = result.getJavaScriptResult();

        HtmlPage afterExecution = (HtmlPage) result.getNewPage();

        System.out.println(afterExecution.asXml());

    } catch (FailingHttpStatusCodeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
“执行”Javascript源代码不会做任何事情。我希望您从
result.getNewPage()
中得到的回报很少。尝试更改示例以访问真实站点,并解释您期望看到的结果,然后我们可以尝试执行您的示例

也就是说,有一件事可能会对您有所帮助,那就是将HtmlUnit看作是一个通过Java控制的浏览器。您不需要在页面中“运行”Javascript,而是由HtmlUnit运行。你假装你是一个点击东西的人类用户,但是你通过Java代码进行“点击”


在您的示例中,您将在
页面
中导航DOM,以查找用于触发Javascript的内容——可能是单击按钮或图像。调用
click()
的结果将为您提供一个新页面,该页面由Javascript所做的任何操作生成。

htmlUnit是问题还是比较?嗨,Rodney,谢谢您的回复。是的,我知道htmlUnit是一个无头java浏览器,我必须调用click()事件和其他事件来执行javascript。我基本上想做的是:网站中通常包含很多使用标签的Javascript。我想知道这个javascripts是否被页面实际使用。因此,给定一个页面,我想检查它是否使用了它包含的所有Java脚本。用htmlUnit可以做到这一点吗?我是否使用了正确的工具?如果有更好的方法,请告诉我。谢谢,Irfan和任何浏览器一样,HtmlUnit将执行它找到的任何内容,然后等待用户交互触发Javascript。我不知道HtmlUnit本身会让您通过编程测试是否触发了某些特定的代码位(我似乎记得是通过调试器这样做的,虽然这很难看),但HtmlUnit使用的JS库中可能有一些钩子。也许不是。也许Firebug JS调试器可以帮助您?