example - simple selenium test in java



Selenium many Logs(Wie man es entfernt) (1)

Ich habe das Selenium 3.0.1 mit Firefox 48 ausprobiert .

Und ich habe bereits den folgenden Code ausprobiert:

java.util.logging.Logger.getLogger ("com.gargoylesoftware.htmlunit"). setLevel (Level.OFF); java.util.logging.Logger.getLogger ("org.apache.commons.httpclient"). setLevel (Level.OFF); java.util.logging.Logger.getLogger (ProtocolHandshake.class.getName ()). setLevel (Level.OFF);

aber sobald ich die üblichen Tests unter Netbeans durchführe , ... kommen die Protokolle immer noch heraus:

Dec 02, 2016 9:17:53 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Dec 02, 2016 9:17:57 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS

Irgendwelche Hinweise, um das zu lösen?


Sie müssen Ihre Logger im Speicher logging.properties oder eine logging.properties Konfigurationsdatei logging.properties . In den java.util.logging.Logger Dokumenten:

Logger-Objekte können durch Aufrufe einer der getLogger-Factory-Methoden abgerufen werden. Diese erstellen entweder einen neuen Logger oder geben einen geeigneten vorhandenen Logger zurück. Es ist wichtig zu beachten, dass der Logger, der von einer der getLogger-Factory-Methoden zurückgegeben wird, jederzeit müllentsorgt werden kann, wenn ein starker Verweis auf den Logger nicht beibehalten wird.

Wenn ein neuer Logger zurückgegeben wird, wird der Log-Level vom LogManager bestimmt, der standardmäßig die Einstellungen aus einer logging.properties Datei verwendet. In Ihrem Beispiel ist Folgendes zu sehen:

  1. Aufruf von getLogger erstellt einen neuen Logger und legt die Ebene von LogManager fest.
  2. Ihr Code setzt die Logger-Stufe auf AUS.
  3. GC wird ausgeführt und zerstört Ihren Logger zusammen mit den Einstellungen, die Sie gerade vorgenommen haben.
  4. Selenium ruft getLogger auf, erstellt einen neuen Logger und legt die Ebene in LogManager fest.

Hier ist ein Beispiel-Testfall, um den Punkt zu beweisen:

    public static void main(String[] args) {
        String name = "com.gargoylesoftware.htmlunit";
        for (int i = 0; i < 5; i++) {
            System.out.println(Logger.getLogger(name).getLevel());
            Logger.getLogger(name).setLevel(Level.OFF);
            System.runFinalization();
            System.gc();
            System.runFinalization();
            Thread.yield();
        }
    }

Welches wird null anstelle von OFF ausgeben.

Wenn Sie Ihren Logger mit einer starken Referenz festhalten, geschieht Schritt 3 niemals, und Selen sollte stattdessen den von Ihnen erstellten Logger finden, dessen Pegel auf AUS eingestellt ist.

private static final Logger[] pin;
static {
    pin = new Logger[]{
        Logger.getLogger("com.gargoylesoftware.htmlunit"),
        Logger.getLogger("org.apache.commons.httpclient"),
        Logger.getLogger("org.openqa.selenium.remote.ProtocolHandshake")
    };

    for (Logger l : pin) {
        l.setLevel(Level.OFF);
    }
}




logging