выполнить Javascript в htmlUnit - PullRequest
       4

выполнить Javascript в htmlUnit

3 голосов
/ 25 ноября 2011

Я пытаюсь выполнить JavaScript с помощью htmlUnit.После выполнения JavaScript, я хочу проверить, были ли на странице некоторые изменения из-за выполнения JavaScript.т.е. я хочу сравнить html-страницу до и после выполнения javascript ...

Любые идеи, как я могу это сделать ...

Вот пример кода, объясняющий, что я на самом деле собираюсь делать...

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();
    }

}

1 Ответ

1 голос
/ 26 ноября 2011

«Выполнение» источника Javascript ничего не даст. Я ожидаю, что вы получите очень мало назад от result.getNewPage(). Попробуйте изменить пример так, чтобы он попал на реальный сайт, и объясните, какой результат вы ожидаете увидеть, тогда мы можем попытаться выполнить ваш пример.

Тем не менее, одна вещь, которая может вам помочь, - это думать о HtmlUnit как о браузере, которым вы управляете через Java. Вы не «запускаете» Javascript на странице, HtmlUnit запускает его. Вы притворяетесь, что вы человек, щелкающий мышью по вещам, но вы делаете «щелчок» с помощью кода Java.

В вашем примере вы должны перемещаться по DOM в вашем page, чтобы найти что-то, что вы используете для запуска Javascript - возможно, нажав кнопку или изображение. Результат вызова click() даст вам новую страницу, полученную в результате того, что сделал Javascript.

...