Как игнорировать предупреждения и ошибки HTMLUnit, связанные с jQuery?

Можно ли учить HTMLUnit игнорировать сценарии/файлы javascript определенных на веб-странице? Некоторые из них просто находятся вне моего контроля (например, jQuery), и я ничего не могу с ними поделать. Предупреждения раздражают, например:

[WARN] com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument:
getElementById(script1299254732492) did a getElementByName for Internet Explorer

На самом деле я использую JSFUnit, и под ним работает HTMLUnit.

Ответы

Ответ 1

Если вы хотите избежать исключений из-за каких-либо ошибок JavaScript:

 webClient.setThrowExceptionOnScriptError(false);        

Ответ 2

Ну, мне еще предстоит найти способ для этого, но я нашел эффективное обходное решение. Попробуйте реализовать FalsifyingWebConnection. Посмотрите пример кода ниже.

public class PinConnectionWrapper extends FalsifyingWebConnection {

    public PinConnectionWrapper(WebClient webClient)
            throws IllegalArgumentException {
        super(webClient);
    }

    @Override
    public WebResponse getResponse(WebRequest request) throws IOException {
        WebResponse res = super.getResponse(request);
        if(res.getWebRequest().getUrl().toString().endsWith("/toolbar.js")) {
            return createWebResponse(res.getWebRequest(), "",
"application/javascript", 200, "Ok");
        }
        return res;
    }

}

В приведенном выше коде всякий раз, когда HtmlUnit будет запрашивать для toolbar.js, мой код просто вернет фальшивый пустой ответ. Вы можете подключить свой вышеописанный класс-оболочку к HtmlUnit, как показано ниже.

final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
new PinConnectionWrapper(webClient);

Ответ 3

Посмотрите WebClient.setScriptPreProcessor. Это даст вам возможность изменить (или в вашем случае, остановить) данный script до его выполнения.

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

Ответ 4

Если вы заинтересованы в игнорировании всех записей журнала предупреждений, вы можете установить уровень журнала INFO для com.gargoylesoftware.htmlunit.javascript.host.html.HTMLDocument в файле log4j.properties.

Ответ 5

LogFactory.getFactory(). setAttribute ( "org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog" ); java.util.logging.Logger.getLogger( "com.gargoylesoftware.htmlunit" ) setLevel (Level.OFF). java.util.logging.Logger.getLogger( "org.apache.commons.httpclient" ) setLevel (Level.OFF);.

Вставьте этот код.