web-dev-qa-db-fra.com

Désactivation des avertissements HtmlUnit

Savez-vous comment désactiver les avertissements, les notes et les erreurs dans HtmlUnit?

57
oneat

Mettez cela quelque part autour du début de votre code; il fermera sa bouche sale:

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

webClient = new WebClient(bv);
webClient.setCssEnabled(false);

webClient.setIncorrectnessListener(new IncorrectnessListener() {

    @Override
    public void notify(String arg0, Object arg1) {
        // TODO Auto-generated method stub

    }
});
webClient.setCssErrorHandler(new ErrorHandler() {

    @Override
    public void warning(CSSParseException exception) throws CSSException {
        // TODO Auto-generated method stub

    }

    @Override
    public void fatalError(CSSParseException exception) throws CSSException {
        // TODO Auto-generated method stub

    }

    @Override
    public void error(CSSParseException exception) throws CSSException {
        // TODO Auto-generated method stub

    }
});
webClient.setJavaScriptErrorListener(new JavaScriptErrorListener() {

    @Override
    public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void scriptException(HtmlPage arg0, ScriptException arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
        // TODO Auto-generated method stub

    }
});
webClient.setHTMLParserListener(new HTMLParserListener() {

    @Override
    public void warning(String arg0, URL arg1, int arg2, int arg3, String arg4) {
        // TODO Auto-generated method stub

    }

    @Override
    public void error(String arg0, URL arg1, int arg2, int arg3, String arg4) {
        // TODO Auto-generated method stub

    }
});

webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setThrowExceptionOnScriptError(false);
100
Arsen Zahray

Le code de réponse d'Arsen Zahray a aidé à supprimer presque tous les journaux générés par HtmlUnit.

Mais une modification permet de les supprimer tous. Utilisation:

Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 

au lieu de:

Java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
46
sha

Pour supprimer toutes les sorties de la dernière version de HtmlUnit, il vous suffit d'ajouter ces lignes dans un bloc statique ou dans votre classe principale:

Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
System.setProperty("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");

Il n'est PAS nécessaire de remplacer une méthode comme le disent d'autres réponses.

35
Mosty Mostacho

Ici, vous pouvez obtenir des informations sur comment manipuler la journalisation de HtmlUnit .

Voici ce que j'ai ajouté à mon log4j.properties afin de désactiver les messages de débogage détaillés des composants HtmlUnit:

# Set specific logger levels.
log4j.logger.org.mortbay.log=fatal
log4j.logger.org.Apache.http=fatal
log4j.logger.org.Apache.http.headers=fatal
log4j.logger.org.Apache.http.wire=fatal
# For HttpClient 3, which is used by FirefoxDriver
log4j.logger.httpclient.wire=fatal
log4j.logger.org.Apache.commons=fatal
log4j.logger.com.gargoylesoftware.htmlunit=fatal
log4j.logger.com.gargoylesoftware.htmlunit.WebTestCase=fatal
# Change this to TRACE when enabling the debugger.
log4j.logger.com.gargoylesoftware.htmlunit.javascript.DebugFrameImpl=fatal
13
Ivanov Artemk

Essayez le code suivant pour désactiver le niveau de journalisation:

Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
12
some_other_guy

J'utilise le code ci-dessous et cela fonctionne parfaitement:

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);
6
Adnan Ghaffar

Éteignez les enregistreurs. Mais ce n'est pas une bonne solution, car vous voudrez peut-être avoir des problèmes inhabituels dans les journaux.

Je sais que HtmlUnit produit de nombreuses exceptions, avertissements, etc. sans importance. Vous pouvez supprimer quelques-uns de ceux qui utilisent:

client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
3
coding_idiot

Ajoutez simplement cette chaîne à votre log4.properties:

log4j.logger.com.gargoylesoftware.htmlunit=fatal
3
mike

Cela a fonctionné pour moi:

@Test
    public void homePage() throws Exception {
        final WebClient webClient = new WebClient();   
 webClient.setThrowExceptionOnScriptError(false);
    final HtmlPage page = webClient.getPage("http://localhost:8080/web/guest/home");
2
Alex Punnen

Jetez un oeil à la docs .

Il existe un exemple de fichier log4 utilisé par la suite de tests, vous pouvez le trouver ici , vous pouvez tout désactiver si vous le souhaitez.

2
Ahmed Ashour

Désormais, dans HtmlUnit 2.9, WebClient.setCssErrorHandler(new SilentCssErrorHandler()) peut facilement ignorer les avertissements et les erreurs. Par exemple:

@Override
protected WebClient modifyWebClient(WebClient client) {
    // currently does nothing, but may be changed in future versions
    WebClient modifiedClient = super.modifyWebClient(client);

    modifiedClient.getOptions().setThrowExceptionOnScriptError(false);
    modifiedClient.setCssErrorHandler(new SilentCssErrorHandler());

    return modifiedClient;
}
1
Howard

Essayez d'ajouter ceci à votre code:

LogFactory.getFactory().setAttribute("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");

Fondamentalement, cela rend le journal de l'enregistreur dans NoOpLog, qui n'écrit les informations du journal nulle part.

1
Salman

Si vous n'avez pas besoin du support JavaScript, c'est la manière la plus simple de le désactiver:

WebClient client = new WebClient(BrowserVersion.BEST_SUPPORTED);
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setJavaScriptEnabled(false);
client.setCssErrorHandler(new SilentCssErrorHandler());
client.setHTMLParserListener(new HTMLParserListener() {
    @Override
    public void error(String message, URL url, String html, int line, int column, String key) {
    }

    @Override
    public void warning(String message, URL url, String html, int line, int column, String key) {
    }
});

Vous désactivez également les exceptions et vous connectez aux codes d'état défaillants, JavaScript, les erreurs CSS et les erreurs d'analyse HTML.

Si vous avez besoin du support JavaScript, vous pouvez utiliser une implémentation personnalisée pour les erreurs JavaScript:

client.setJavaScriptErrorListener(new JavaScriptErrorListener() {
    @Override
    public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
    }

    @Override
    public void scriptException(HtmlPage arg0, ScriptException arg1) {
    }

    @Override
    public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
    }

    @Override
    public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
    }
});

Si vous n'en avez pas besoin, vous pouvez également le désactiver:

client.getOptions().setCssEnabled(false);

Il n'est donc pas nécessaire de configurer un autre enregistreur.

0
Samuel Philipp

Une option qui a bien fonctionné pour moi est de changer l'enregistreur HtmlUnit pour se connecter à un fichier différent juste pour que j'ai ces erreurs au cas où j'aurais besoin de le renvoyer un certain temps et qu'il n'encombre pas non plus mes journaux principaux. Ci-dessous est le log4j modification que j'ai apportée à log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=ERROR, HTMLUNIT
log4j.additivity.com.gargoylesoftware.htmlunit=false
log4j.appender.HTMLUNIT = org.Apache.log4j.RollingFileAppender
log4j.appender.HTMLUNIT.layout=org.Apache.log4j.PatternLayout
log4j.appender.HTMLUNIT.layout.ConversionPattern=%m%n
log4j.appender.HTMLUNIT.File=logs/HtmlUnitLog4j.log
log4j.appender.HTMLUNIT.MaxFileSize=5MB
log4j.appender.HTMLUNIT.MaxBackupIndex=5
0
vanval