WebDriver 跟踪执行和记录结果
WebDriver tracking execution and logging results
我们在 Selenium-RC 上有一个关键字驱动的框架。在此框架中,关键字、标识符和数据保存在 XML 文件中,框架将根据 XML 文件中的关键字 运行 AUT。
目前我们正在更改 webdriver 上的这个框架。我正在努力的一个领域是在执行每个步骤后记录结果。请建议执行监视执行的方法,例如查找标识符是否可用、检查复选框是否被选中等。
我遇到了 "WebDriverEventListener" 并且一直在努力,如果它有助于我的要求。
请分享您对如何记录执行结果的发现。
谢谢!
王公
您绝对可以使用 WebDriverEventListener
并添加自定义日志语句。我认为这是个好主意。我的回答 here 部分回答了这个问题。
您可能可以将 WebDriverEventListener
与 WebDriver 内部日志结合起来。 WebDriver 为您提供各种级别的内部日志。为此,您需要设置 loggingPreferences
功能,并且在完成所有测试后,您可以检索日志并 print/save 它们。例如,
LoggingPreferences loggingPreferences = new LoggingPreferences();
loggingPreferences.enable(LogType.BROWSER, Level.ALL);
loggingPreferences.enable(LogType.CLIENT, Level.ALL);
loggingPreferences.enable(LogType.DRIVER, Level.ALL);
loggingPreferences.enable(LogType.PERFORMANCE, Level.ALL);
loggingPreferences.enable(LogType.PROFILER, Level.ALL);
loggingPreferences.enable(LogType.SERVER, Level.ALL);
DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
WebDriver driver = new FirefoxDriver(desiredCapabilities);
driver.get("http://www.google.com");
Logs logs = driver.manage().logs();
LogEntries logEntries = logs.get(LogType.DRIVER); //now pick the LOG type you want
for (LogEntry logEntry : logEntries) {
System.out.println(logEntry.getMessage());
//or save write it to log4j etc.
}
你可以使用log4j。例如添加Maven依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
定义记录器:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log
{
private static final Logger logger = LogManager.getLogger(Log.class);
public static void info(String message)
{
Log.info(message);
}
public static void warn(String message)
{
Log.warn(message);
}
public static void error(String message)
{
Log.error(message);
}
}
然后你必须创建记录器对象static Logger logger = LogManager.getLogger("com.your.package");
现在您可以在测试方法(或页面对象)中使用它,例如 logger.info("user clicked link to open login poup");
您还必须为记录器创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n"/>
</Console>
<File name="LogFile" fileName="logs/${date:yyyy-MM-dd HH:mm}.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="com.mycompany.openforbeta.utils.Log" level="info">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="LogFile"/>
</Root>
</Loggers>
</configuration>
我们在 Selenium-RC 上有一个关键字驱动的框架。在此框架中,关键字、标识符和数据保存在 XML 文件中,框架将根据 XML 文件中的关键字 运行 AUT。
目前我们正在更改 webdriver 上的这个框架。我正在努力的一个领域是在执行每个步骤后记录结果。请建议执行监视执行的方法,例如查找标识符是否可用、检查复选框是否被选中等。
我遇到了 "WebDriverEventListener" 并且一直在努力,如果它有助于我的要求。
请分享您对如何记录执行结果的发现。
谢谢!
王公
您绝对可以使用 WebDriverEventListener
并添加自定义日志语句。我认为这是个好主意。我的回答 here 部分回答了这个问题。
您可能可以将 WebDriverEventListener
与 WebDriver 内部日志结合起来。 WebDriver 为您提供各种级别的内部日志。为此,您需要设置 loggingPreferences
功能,并且在完成所有测试后,您可以检索日志并 print/save 它们。例如,
LoggingPreferences loggingPreferences = new LoggingPreferences();
loggingPreferences.enable(LogType.BROWSER, Level.ALL);
loggingPreferences.enable(LogType.CLIENT, Level.ALL);
loggingPreferences.enable(LogType.DRIVER, Level.ALL);
loggingPreferences.enable(LogType.PERFORMANCE, Level.ALL);
loggingPreferences.enable(LogType.PROFILER, Level.ALL);
loggingPreferences.enable(LogType.SERVER, Level.ALL);
DesiredCapabilities desiredCapabilities = DesiredCapabilities.firefox();
desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPreferences);
WebDriver driver = new FirefoxDriver(desiredCapabilities);
driver.get("http://www.google.com");
Logs logs = driver.manage().logs();
LogEntries logEntries = logs.get(LogType.DRIVER); //now pick the LOG type you want
for (LogEntry logEntry : logEntries) {
System.out.println(logEntry.getMessage());
//or save write it to log4j etc.
}
你可以使用log4j。例如添加Maven依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.1</version>
</dependency>
定义记录器:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Log
{
private static final Logger logger = LogManager.getLogger(Log.class);
public static void info(String message)
{
Log.info(message);
}
public static void warn(String message)
{
Log.warn(message);
}
public static void error(String message)
{
Log.error(message);
}
}
然后你必须创建记录器对象static Logger logger = LogManager.getLogger("com.your.package");
现在您可以在测试方法(或页面对象)中使用它,例如 logger.info("user clicked link to open login poup");
您还必须为记录器创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n"/>
</Console>
<File name="LogFile" fileName="logs/${date:yyyy-MM-dd HH:mm}.log" immediateFlush="false" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Logger name="com.mycompany.openforbeta.utils.Log" level="info">
<AppenderRef ref="Console"/>
</Logger>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="LogFile"/>
</Root>
</Loggers>
</configuration>