2012-11-03 5 views
18

Ist es möglich, den Logger irgendwie zu erhalten, dass Selenium WebDriver verwendet? Ich möchte ein Transkript aller Befehle erfassen, die ausgegeben wurden (z. B. Öffnen, Warten, Klicken usw.). Insbesondere suche ich nach einer Java-Lösung, da ich die Tests in Junit exportiere.So erhalten Sie nativen Logger in Selenium WebDriver

fand ich diesen Code auf ihrer Website, es ist nichts dagegen zeigt auf Standard aus

DesiredCapabilities caps = DesiredCapabilities.firefox(); 
    LoggingPreferences logs = new LoggingPreferences(); 
    logs.enable(LogType.DRIVER, Level.FINEST); 
    caps.setCapability(CapabilityType.LOGGING_PREFS, logs); 
    driver = new FirefoxDriver(caps); 

Antwort

33

Protokollierung im Treiber aktivieren Sie verwenden, auswählen, welche Arten melden Sie sich in und die Protokollebene interessiert sind (ich verwende FirefoxDriver, so dass alle Arten von Protokollen und sammeln alle Log-Meldungen)

LoggingPreferences logs = new LoggingPreferences(); 
logs.enable(LogType.BROWSER, Level.ALL); 
logs.enable(LogType.CLIENT, Level.ALL); 
logs.enable(LogType.DRIVER, Level.ALL); 
logs.enable(LogType.PERFORMANCE, Level.ALL); 
logs.enable(LogType.PROFILER, Level.ALL); 
logs.enable(LogType.SERVER, Level.ALL); 

DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox(); 
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logs); 

WebDriver driver = new FirefoxDriver(desiredCapabilities); 

Dann, nach der Durchführung des Tests Sie die Protokolle sammeln kann (ich bin nur der Fahrer Protokolle zu sammeln, aber Sie können für jede Art von Protokoll das gleiche tun)

Logs logs = driver.manage().logs(); 
LogEntries logEntries = logs.get(LogType.DRIVER); 

for (LogEntry logEntry : logEntries) { 
    System.out.println(logEntry.getMessage()); 
} 
+0

Wie würde ich diese Protokolle mit Log4j oder einem anderen Logger erfassen? –

+0

@MichelFeldheim Anstatt "logEntry.getMessage()" im obigen Beispiel an die Konsole zu drucken, sollten Sie diesen Wert mit log4j logger drucken. –

+0

nette Lösung für FF, aber haben Sie eine Lösung für IE11? – sgrillon

1

ich log4j für die Protokollierung als utils-Logger verwendet, ist die einfachste und geradlinig man das, das verwendet werden kann, (MEINER BESCHEIDENEN MEINUNG NACH).

POM Abhängigkeiten:

<dependency> 
      <groupId> org.apache.cassandra</groupId> 
      <artifactId>cassandra-all</artifactId> 
      <version>0.8.1</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>1.6.6</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jul-to-slf4j</artifactId> 
      <version>1.6.6</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>log4j-over-slf4j</artifactId> 
      <version>1.6.6</version> 
      <scope>runtime</scope> 
     </dependency> 

Importe sind folgende:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

Nutzung:

private static Logger log = LoggerFactory.getLogger(classname.class); 

und dann einfach als solche verwendet werden:

logger.info ("butonCLick"); 
driver.findElement(By.id("blablabla")).click(); 

Ich hoffe, das funktioniert für Sie.

+1

Sie melden manuell mit 'Logger .info ("butonCLick"); '. Ich mache das jetzt auch, aber es ist ein Schmerz und auch unzuverlässig. Ich möchte einen nativen Selenlogger erhalten und dies tun. – Zombies

3

Versuchen

driver.manage().logs() 

Sie Protokolle Schnittstelle erhalten, die Typen Methoden erhalten Protokolle und Protokoll hat. Siehe Logs interface docs