将选项传递给 chrome 驱动程序 selenium

Posted

技术标签:

【中文标题】将选项传递给 chrome 驱动程序 selenium【英文标题】:Passing options to chrome driver selenium 【发布时间】:2012-12-02 21:53:21 【问题描述】:

我正在尝试禁用 Chrome 控制台的输出。如果我通过 --start-maximized 选项它工作正常。我可能有错误的命令?

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--silent"));
chrome = new ChromeDriver(_chromeservice,capabilities);

我也试过了

 ChromeOptions options = new ChromeOptions();
 options.addArguments("silent");
 chrome = new ChromeDriver(options);

输出

启动 ChromeDriver 端口=26703 版本=23.0.1240.0 日志=/Brett/workspace/TestNG/chromedriver.log [1214/161331:ERROR:ipc_sync_channel.cc(378)] 取消挂起的发送 [1214/161331:ERROR:ipc_sync_channel.cc(378)] 取消挂起的发送 [1214/161331:ERROR:ipc_sync_channel.cc(378)] 取消挂起 发送块引用

【问题讨论】:

静默是一个有效的开关吗?您发送开关的方式是正确的..禁用日志记录是您想要的吗? 如果您尝试将开关直接传递给 chrome,则 --silent 不是有效开关。这里link 是有效开关的列表。 【参考方案1】:

受到Chromedriver ticket(关于silent 选项)的提示,我查看了ChromeDriverService.java 的来源,找到了对"webdriver.chrome.logfile" 的引用。

在我的java 命令中添加-Dwebdriver.chrome.logfile="/dev/null" 后,日志再次变得可读:无用的ChromeDriver 日志消失了,而System.out.println 调用和异常仍显示在控制台中。

我用以下参数(Linux / Mac)启动java

DIR=path/to/dir/containing/selenium/and/stuff
cd "$DIR" && java -cp "$DIR\
:$DIR/output\
:$DIR/bin/selenium-server-standalone-2.33.0.jar" \
-Dwebdriver.chrome.driver="$DIR/bin/chromedriver" \
-Dwebdriver.chrome.args="--disable-logging" \
-Dwebdriver.chrome.logfile="/dev/null" \
AllTests

如果您使用的是 Windows:

set DIR=path\to\dir\containing\selenium\and\stuff
cd "%DIR%" && java -cp "%DIR%;%DIR%\output;%DIR%\bin\selenium-server-standalone-2.33.0.jar" ^
-Dwebdriver.chrome.driver="%DIR%\bin\chromedriver.exe" ^
-Dwebdriver.chrome.args="--disable-logging" ^
-Dwebdriver.chrome.logfile=NUL ^
AllTests

我的类路径 (-cp) 的组成说明:我的测试位于“$DIR/output”目录中。 Selenium jar 文件放在“$DIR/bin/selenium-server-standalone-2.33.0.jar”中。 “AllTests”是包含public static void main(String[] args) 的类的名称 - 这会启动我的测试。

其他参数不言自明,请根据需要进行调整。为方便起见(在 shell/批处理脚本中使用),我在变量 DIR 中声明了公共目录。

【讨论】:

您能否清楚地解释一下如何在 Java 和 Windows 中使用它。我的意思是请添加您的代码 @user2087450 查看修改后的答案。【参考方案2】:

当我用

设置 chrome 时
  selenium-chrome-driver-2.48.2.jar
  chromedriver 2.20
  selenium-java-2.48.2.jar

以上答案都不适合我, 由于我看到一些答案是几年前的,所以我会发布对我有用的东西。

    ChromeOptions chromeOptions = setupChromeOptions();
    System.setProperty("webdriver.chrome.logfile", "\\path\\chromedriver.log");
    System.setProperty("webdriver.chrome.driver", "\\path\\chromedriver.exe");
    System.setProperty("webdriver.chrome.args", "--disable-logging");
    System.setProperty("webdriver.chrome.silentOutput", "true");
    driver = new ChromeDriver(chromeOptions);

【讨论】:

宾果游戏。我需要logfileargssilentOutput。现在输出看起来好多了。证明小事有大不同。【参考方案3】:

改用“--disable-logging”。

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--disable-logging"));
chrome = new ChromeDriver(_chromeservice,capabilities);

【讨论】:

感谢您的回复。我试过了,它仍然输出相同的信息。 顺便说一句,您看到的并不是真正的错误,因为它们不会以任何方式影响 chrome 驱动程序的执行,对吧? 不,它不会影响任何测试的执行。我只是在考虑下线。一段时间后,它会在日志文件中占用大量空间。【参考方案4】:

至少从 Selenium 3 开始,您可以使用 ChromeDriverService 及其内部类 Builder 来以静默模式启动驱动程序。

单线器:

new ChromeDriver(new ChromeDriverService.Builder().withSilent(true).build());

构造函数很简单,您创建一个新的服务生成器,将静默设置为 true(这是关键部分),最后将其构建到 ChromeDriver 的构造函数所需的 ChromeDriverService 中。

【讨论】:

以上是关于将选项传递给 chrome 驱动程序 selenium的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 和 Selenium 为我的驱动程序传递无头选项?

根据选项将 axios.get URL 传递给 axios.all

如何使用选项卡导航器将道具传递给 Screen 组件?

如何将值从 NSTabViewController 传递给子视图?

如何将 blob 从 Chrome 扩展程序传递到 Chrome 应用程序

如何将系统属性传递给 jar 文件