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>

这里有更多信息http://logging.apache.org/log4j/2.x/