Как ограничить размер истории HtmlUnit? - PullRequest
4 голосов
/ 17 мая 2010

Я использую HtmlUnit для анализа и обнаружил, что память теряется из-за WebClient, хранящего историю для каждого WebWindow. Я вообще не использую историю, и я хотел бы отключить ее управление или хотя бы ограничить ее размер 1 или 2. Это возможно?

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Следующий код установит ignoreNewPages_ в true:

try {
    final WebClient webClient = getWebClient();
    final List<WebWindow> webWindows = webClient.getWebWindows();
    History window = webWindows.get(0).getHistory();
    Field f = window.getClass().getDeclaredField("ignoreNewPages_"); //NoSuchFieldException
    f.setAccessible(true);
    ((ThreadLocal<Boolean>) f.get(window)).set(true);
} catch (Exception e) {
    e.printStackTrace();
    throw new AssertionError("Can't disable history");
}

Аксессоры:

private static WebTester getTester() {
    return JWebUnit.getTester();
}

private HtmlUnitTestingEngineImpl getHtmlUnitEngine() {
    return (HtmlUnitTestingEngineImpl) getTester().getTestingEngine();
}

private WebClient getWebClient() {
    return getHtmlUnitEngine().getWebClient();
}
0 голосов
/ 29 июня 2011

В HtmlUnit нет опции для отключения истории, о которой я знаю. В классе History есть метод getHistory (), но нет setHistory () или disableHistory (). То, что я сделал, и это, конечно, не идеально, это выпустить веб-страницу и восстановить ее. Пока вы не выпускаете ваш CookieManager, вы должны быть в порядке в отношении файлов cookie. В основном, как только я прошел весь путь и вошел в систему, я обнуляю свое окно после сохранения текущей страницы во временную строку, затем я заново создаю его в том месте, где остановился. Я делаю это в определенные моменты, чтобы очистить историю.

String tempPage = currentHtmlPage.getUrl().toString(); //HtmlPage class

window = null;

window = new WebWindow();

currentHtmlPage = new WebWindow.getWebClient().getPage(tempPage); //HtmlPage class

Это позволяет окну выбрать, где оно остановилось. Это ужасно, но если вы в отчаянии, это может сработать.

...