【问题标题】:How to obtain native logger in Selenium WebDriver如何在 Selenium WebDriver 中获取本机记录器
【发布时间】:2012-10-23 16:16:30
【问题描述】:

是否有可能以某种方式获取 Selenium WebDriver 使用的记录器?我想捕获所有发出的命令的记录(例如:打开、等待、单击等)。特别是我正在寻找一个 java 解决方案,因为我正在将测试导出到 junit。

我在他们的网站上找到了这段代码,但是在标准输出上没有显示任何内容

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

【问题讨论】:

    标签: java logging selenium webdriver selenium-webdriver


    【解决方案1】:

    在你正在使用的驱动中启用日志记录,选择你感兴趣的日志类型和日志级别(我使用的是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);
    

    然后,运行测试后,您可以收集日志(我只收集 DRIVER 日志,但您可以对任何类型的日志执行相同操作)

    Logs logs = driver.manage().logs();
    LogEntries logEntries = logs.get(LogType.DRIVER);
    
    for (LogEntry logEntry : logEntries) {
        System.out.println(logEntry.getMessage());
    }
    

    【讨论】:

    • 如何使用 log4j 或任何其他记录器捕获该日志?
    • @MichelFeldheim 您应该使用 log4j 记录器打印该值,而不是在上面的示例中将“logEntry.getMessage()”打印到控制台。
    • 不错的 FF 解决方案,但您有 IE11 的解决方案吗?
    • 我很久以前写过这个,但我最好的猜测仍然是您需要更改驱动程序。在我的示例中,我使用FirefoxDriver,原则上您可以将其替换为任何其他驱动程序,即 IE11 的驱动程序。你试过吗?
    【解决方案2】:

    试试

    driver.manage().logs()
    

    您将获得 Logs 接口,该接口具有获取日志和日志类型的方法。见Logs interface docs

    【讨论】:

      【解决方案3】:

      试试这个 -

      import logging
      logging.basicConfig(filename = log_filename, level = logging.DEBUG)
      

      参考 - Selenium unit tests in Python -- where is my log file?

      【讨论】:

        【解决方案4】:

        我正在使用 log4j 进行日志记录,因为 utils 记录器是最简单、最直接的一种,可以使用 (恕我直言)。

        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();
        

        希望这对你有用。

        【讨论】:

        • 您正在使用logger.info ("butonCLick"); 手动登录。我现在也在这样做,但这很痛苦,而且也不可靠。我想获得一个本地硒记录器并执行此操作。
        猜你喜欢
        • 1970-01-01
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 2014-12-11
        • 2013-10-14
        • 2019-12-29
        • 1970-01-01
        • 2018-09-04
        相关资源
        最近更新 更多