2012-11-03 2 views
18

Selenium WebDriver가 사용하는 로거를 얻을 수 있습니까? 나는 발행 된 모든 명령의 사본을 캡처하고 싶습니다 (예 : 열림, 기다림, 클릭 등). 특히 저는 junit으로 테스트를 내보내므로 Java 솔루션을 찾고 있습니다. Selenium WebDriver에서 원시 로거를 얻는 방법

나는, 그러나 그것은 표준 출력 내가 로거 유틸로 로깅의 log4j를 사용하고

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

답변

33

당신이 사용하고있는 드라이버에서 로깅 사용을 참조하십시오, 관심있는 타입과 로그 레벨 (나는 모든 로그 메시지를 로그의 모든 유형을 활성화하고 수집, FirefoxDriver을 사용하고 있습니다)

를 기록하는 선택 그런 다음
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); 

, 테스트는 (I 드라이버 만 로그를 수집하고 있습니다,하지만 당신은 로그의 모든 유형에 대해 동일한 작업을 수행 할 수 있습니다) 로그를 수집 할 수 있습니다

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

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

log4j 또는 다른 로거로 어떻게 그 로그를 캡처합니까? –

+0

@MichelFeldheim 위 예제에서 "logEntry.getMessage()"를 콘솔에 인쇄하는 대신 log4j 로거를 사용하여 해당 값을 인쇄해야합니다. –

+0

FF 용으로 좋은 솔루션이지만 IE11 용 솔루션이 있습니까? – sgrillon

1

가장 쉽고 정직 하나가, 즉 사용할 수있다 아무것도 표시되지 않습니다, 자신의 웹 사이트에이 코드를 발견 (IMHO).

POM 종속성 :

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

수입은 다음과 같습니다

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

사용 : 다음

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

와 단지 등을 사용

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

희망이 당신을 위해 작동합니다.

+1

을 실행 한 후 수동으로'로거로 로그인하는 .info ("butonCLick");'. 나는 지금도 그렇게하고 있지만 고통스럽고 믿을 수 없다. 네이티브 셀레늄 로거를 얻고 싶습니다. – Zombies

3

당신은 로그를 얻을 수 및 유형을 기록하는 방법이 있습니다 로그 인터페이스를 얻을 것이다

driver.manage().logs() 

을보십시오. Logs interface docs

관련 문제