我正在从事selenium webdriver的一个自学项目,并使用log4j进行日志记录。有一个测试类——包含所有测试用例作为方法;有一个页面类——包含测试类可以使用的所有web元素和方法
我应该如何使用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,然后最大的问题是我必须在每个方法中调用属性配置器。
我怎样才能以更好的方式初始化它,而不必每次都调用Property tyConfigurator?
您可能希望有一个单独的类,可以在其中初始化log4j,并从该类中调用一个方法,以在其他每个类中获得log4j的实例。在下面的示例中,您可以从任何其他类调用createLogger()方法来获取Log4j的实例,例如use: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;
}
}
问题内容: 我使用绑定框架已有一段时间了,我想知道您如何处理这种情况。 您的报纸有一些属性,例如 (字符串)标题 (布尔值)已发布 (日期)发布日期 在您看来,您拥有一份报纸列表,可以同时对其进行全部编辑。这意味着您可以在单个请求中更改所有newspape的标题或“已发布”的所有状态。 问题在于,当我们使用绑定框架时,您将有点像编辑数据库中的数据一样编辑报纸的数据…将每个值彼此独立地绑定到字段
我正在用Ionic framework开发移动应用程序。移动应用程序有一个登录页面。 登录页面后,转到另一个显示用户信息的页面。首先用户登录系统,之后用户可以看到自己的信息。但注销后,另一个用户登录到系统中,另一个用户看不到自己的信息,用户看到的是老用户的信息。如何重新加载用户信息页面? 我试图解决这样的问题; 注销时, 但这并不有效。 有其他解决方案吗?有人能帮我吗?我如何重新加载信息页面? 我
我已经创建了一些mapstruct映射器,并用spring构造函数注入进行了注释。我知道在测试中,我可以用自动绘制映射器,但它看起来很重,加载速度很慢。我可以在不初始化spring上下文的情况下获取映射器吗?这是好的做法吗?
测试框架工具 Karma Intern NightWatch.js
问题内容: 我如何在seleniumwebdriver 3.0 beta版本中使用geckodriver。当我实例化Firefox时: 我得到错误: 线程“主”中的异常java.lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver.gecko.driver系统属性设置;否则,必须执行以下操作:有关更多信息,请参见 https://github.co
问题内容: 我想使用Jenkins运行用TestNG框架编写的Selenium测试。 在jenkins job(Freestyle project)中配置的命令: 注意:对于,给定目录路径 当我运行作业(选项)时,它被Selenium的create session活动打中并给出错误。 注意: 同样的命令运行 成功地 从运行时 的命令行 。 控制台输出的错误日志: (jenkins) 以下是测试课程