0

我正在開發一個自動學習selenium webdriver項目並使用log4j進行日誌記錄。 有一個測試類 - 包含了所有的測試用例方法 有一個頁面類 - 包含所有可通過測試類使用如何在selenium webdriver測試框架中更高效地使用log4j

我應該如何使用log4j的工作網絡元素和方法? 測試類:

public class ConfiguringPropertiesFile { 
    private WebDriver driver; 
    private String baseUrl; 
    static Logger log = Logger.getLogger(ConfiguringPropertiesFile.class); 

@Before 
public void setUp() throws Exception { 
    driver = new FirefoxDriver(); 
    baseUrl = "https://www.some-website.com/"; 

    // Maximize the browser's window 
    driver.manage().window().maximize(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
} 

@Test 
public void test() { 
    PropertyConfigurator.configure("log4j.properties"); 
    driver.get(baseUrl); 
    SearchPage.navigateToFlightsTab(driver); 
    log.info("Navigate to flights tab"); 
    SearchPage.fillOriginTextBox(driver, "New York"); 
    SearchPage.destinationTextBox(driver).sendKeys("Chicago"); 
    log.info("Enter destination city"); 
    SearchPage.departureDateTextBox(driver).sendKeys("12/25/2014"); 
    log.info("Enter departure date"); 
    SearchPage.returnDateTextBox(driver).sendKeys("12/31/2014"); 
    log.info("Enter return date"); 
} 

}

頁面類:

public class SearchPage { 
public static WebElement element = null; 
static Logger log1 = Logger.getLogger(SearchPage.class); 

/** 
* Returns the flight origin text box element 
* @param driver 
* @return 
*/ 
public static WebElement originTextBox(WebDriver driver) { 
    element = driver.findElement(By.id("flight-origin")); 
    return element; 
} 

public static void fillOriginTextBox(WebDriver driver, String origin) { 
    PropertyConfigurator.configure("log4j.properties"); 
    element = originTextBox(driver); 
    element.sendKeys(origin); 
    log1.info("Entering the source city as " + origin); 
} 

/** 
* Returns the flight destination text box element 
* @param driver 
* @return 
*/ 
public static WebElement destinationTextBox(WebDriver driver) { 
    element = driver.findElement(By.id("flight-destination")); 
    return element; 
} 

}

在這種情況下,我在兩個類初始化log4j的,然後大問題是我必須在每種方法中調用PropertyConfigurator。

如何以更好的方式初始化它,而不必每次調用PropertyConfigurator?

回答

2

您可能希望有一個類,您可以在其中初始化log4j,並從該類調用方法以獲取其他類中的log4j實例。在以下示例中,您可以調用createLogger()方法從任何其他類獲取Log4j的實例,例如使用:private Logger log = Logg.createLogger();

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Properties; 
import org.apache.log4j.LogManager; 
import org.apache.log4j.Logger; 
import org.apache.log4j.PropertyConfigurator; 

public class Logg { 

private static Logger _logger; 
private static final String fileName = "defaultlog"; 
private static final String dateAndTimeFormat = "MM-dd-yyyy_hh.mm.ss"; 
private static final String logProperttFilePath = "./src/main/resources/com/framework/properties/log4j.properties"; 

static { 
    /** 
    * This is the static block which appends the log file name with the 
    * timestamp to make it unique 
    */ 
    try { 
     String dateTime = DateAndTime 
       .getFormattedCurrentDateAndTime(dateAndTimeFormat); 
     String FileName = fileName + "-" + dateTime + ".log"; 
     File file = new File("logs/" + FileName); 

     if (file.createNewFile()) { 
      Properties props = new Properties(); 
      props.load(new FileInputStream(logProperttFilePath)); 
      props.setProperty("log4j.appender.File.File", "logs/" 
        + FileName); 
      LogManager.resetConfiguration(); 
      PropertyConfigurator.configure(props); 
      System.out.println("Property log4j.appender.File.File = logs/" 
        + FileName); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
     System.out.print("IO Exception in static method of Logger Class. " 
       + ex.getMessage()); 
     System.exit(-1); 
    } 

} 

/** 
* This method creates instance of the Logger class coming from log4j jar by 
* implementing a singelton 
* 
* @return _logger - new instance if no instance exist else an existing 
*   instance if the method is invoked previously 
*/ 
public static Logger createLogger() { 
    if (_logger == null) { 
     _logger = LogManager.getLogger(Logg.class); 
     return _logger; 
    } else 
     return _logger; 
} 
} 
相關問題