如何使用Geckodriver禁用Selenium中的Firefox日志记录?

时间:2016-12-29 22:01:27

标签: java selenium firefox logging geckodriver

我正在使用:

  • firefox版本50.1.0
  • geckodriver version 0.11.1
  • selenium-java 3.0.1

我试过了

LoggingPreferences preferences = new LoggingPreferences();
preferences.enable(LogType.BROWSER, Level.OFF);
preferences.enable(LogType.CLIENT, Level.OFF);
preferences.enable(LogType.DRIVER, Level.OFF);
preferences.enable(LogType.PERFORMANCE, Level.OFF);
preferences.enable(LogType.SERVER, Level.OFF);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(CapabilityType.LOGGING_PREFS, preferences);
FirefoxDriver driver = new FirefoxDriver(capabilities);

pom.xml

这些方法都没有做任何事情来阻止记录。 如果这有助于某种方式,这是控制台输出:

对于那些想知道的人,我的log4j.properties中有log4j 1.2.17,但没有log4j.xml或{{1}},我根本不使用它。

澄清一下:当我说日志记录时,我指的是IntelliJ IDEA中的控制台输出。我正在使用Java。

10 个答案:

答案 0 :(得分:12)

要在控制台中看不到日志,您可以使用以下内容:

System.setProperty("webdriver.gecko.driver","src/main/resources/drivers/geckodriver.exe");
System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,"true");
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");

return new FirefoxDriver();

答案 1 :(得分:6)

您可以在geckodriver.exe中通过命令行定义所需的日志记录级别。

geckodriver.exe -help    
USAGE:
    geckodriver.exe [FLAGS] [OPTIONS]   
...
OPTIONS:
        --log <LEVEL>
            Set Gecko log level [values: fatal, error, warn, info, config,
            debug, trace]

如果你使用selenium的geckodriver,你有两个选择:

  • 使用自定义参数分别启动geckodriver.exe,并通过RemoteWebDriver从selenium使用
  • 创建自定义包装器,向geckodriver.exe添加额外参数

示例geckodriver包装器bat文件(用于windows):

@ECHO OFF
ECHO Starting geckodriver: %0 %*
.\GeckoDriver\geckodriver.exe --log fatal %* > NUL 2>&1

在java中,您可以通过 webdriver.gecko.driver 系统属性定义geckodriver可执行路径:

System.setProperty("webdriver.gecko.driver", "c:/selenium/geckodriver/gdrvwrapper.bat");

答案 2 :(得分:4)

就这样做

System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,"true");
System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");
driver = new FirefoxDriver();

答案 3 :(得分:2)

我正在C#中使用无头Firefox驱动程序。
要禁用geckoDriver日志记录控制台,下面的代码似乎对我有用:

FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(Directory.GetCurrentDirectory());
service.HideCommandPromptWindow = true;
FirefoxOptions options = new FirefoxOptions();
options.AddArguments("--headless");
options.LogLevel = FirefoxDriverLogLevel.Fatal;
WebDriver = new FirefoxDriver(service, options);

答案 4 :(得分:0)

这是上面@voji回答的linux版本。注意,正如我在评论中所述。我不相信--log致命做任何事情,至少在Linux上没有。 但是重定向到NULL对我来说效果很好

"webdriver.gecko.driver": "/path-to-driver/geckodriver.sh

filename:geckodriver.sh(executable)

#! /bin/bash
echo " ARGS: " $@
geckodriver --log fatal "$@" > /dev/null 2>&1

答案 5 :(得分:0)

对于硒3.14.0来说,这是有效的

System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE,"/dev/null");

答案 6 :(得分:0)

import org.openqa.selenium.firefox.FirefoxDriver
System.setProperty(
  "webdriver.gecko.driver",
  "C:\Users\geckodriver-v0.22.0-win64\geckodriver.exe"
)
System.setProperty(
  FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,
  "true"
)
System.setProperty(
  FirefoxDriver.SystemProperty.BROWSER_LOGFILE,
  "d:\eclipse\scala_log.txt"
)

答案 7 :(得分:0)

这可能有点笨拙,但无需任何编码即可快速完成工作。既然您知道文件的确切位置,并且在Linux上运行代码,则只需将CD插入该目录并

rm geckodriver.log
ln -s /dev/null geckodriver.log

答案 8 :(得分:0)

profile.setPreference("webdriver.log.init", true);

可行,因为它使Web驱动程序误以为日志已被初始化,因此不会对其进行初始化,因此不会生成日志。

答案 9 :(得分:-1)

  GeckoDriverService gecko = new GeckoDriverService(new File("c:/selenium/geckodriver.exe"), 4444, ImmutableList.of("--log=fatal"), ImmutableMap.of());
  gecko.sendOutputTo(new FileOutputStream("gecko_log.txt"));
  gecko.start();

  FirefoxOptions opts = new FirefoxOptions().setLogLevel(Level.OFF);
  DesiredCapabilities capabilities = opts.addTo(DesiredCapabilities.firefox());
  capabilities.setCapability("marionette", true);
  driver = new FirefoxDriver(gecko, capabilities);