在为Selenium配置ChromeDriver选项时,如何以编程方式禁用Chrome的Cloud Print“网络上的新打印机”弹出窗口?
每当ChromeDriver启动时,云打印弹出窗口就会在几秒钟内出现。
可以通过在chrome://settings
中关闭普通的Chrome用户来disable the Cloud Print popup。
AFAIK禁用了Chrome配置文件,但不适用于Selenium,因为每个新的驱动程序实例都具有干净的配置文件配置文件。另外,我不想执行UI自动化来为每个新的驱动程序实例关闭此功能,而是让弹出窗口此时出现(过多增加了复杂性并为折衷提供了失败的空间)。
ChromeOptions.setExperimentalOption("prefs", prefs)
我试图使用Chromium's ChromeDriver documentation on Setting a Chrome Preference设置各种首选项以关闭云打印。
以下是有关如何设置设置Chrome偏好设置的示例
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_settings.popups", 0);
options.setExperimentalOption("prefs", prefs);
Chrome Switches(more switches)似乎都不会执行禁用弹出窗口的技巧,但是某些Chrome Preferences看起来却可能可能工作。
// Enable notifications for new devices on the local network that can be
// registered to the user's account, e.g. Google Cloud Print printers.
const char kLocalDiscoveryNotificationsEnabled[] = "local_discovery.notifications_enabled";
// *************** SERVICE PREFS ***************
// These are attached to the service process.
// ...
const char kCloudPrintProxyEnabled[] = "cloud_print.enabled";
所以我们尝试使用这些:
ChromeOptions options = new ChromeOptions();
final Map<String, Object> prefs = new HashMap<>();
prefs.put("local_discovery.notifications_enabled", 0);
prefs.put("cloud_print.enabled", 0);
options.setExperimentalOption("prefs", prefs);
return new ChromeDriver(options);
但是,如Chromium ChromeDriver docs page所示,提供0时,尝试使用这些首选项无效。
注意:当我使用
"false"
而不是0时,我不再能够再现云打印机的弹出窗口,但是话又说回来,我无法再现该问题(强制它),就像我之前通过切换设置一样在我正常的非驱动程序浏览器上。使用字符串"false"
可能是答案,但是直到我可以通过在两者之间进行切换来确认之前,我不敢相信它,而在我将其归入网络打印机hijinks之前在写这个问题。
我觉得这是我最接近解决方案的地方,其他一切都只是猜测和探索。
编辑:按照this (very sensible) SO answer的建议隔离偏好更改后,差异显示为:
< "notifications_enabled": true
---
> "notifications_enabled": false
在JSON中跟随它的实际行/值时,如下所示:
"local_discovery": {
"notifications_enabled": true
这似乎是我们正在寻找的prefs.put("local_discovery.notifications_enabled", 0);
!现在,最后的诀窍是确定它的位置,并根据true
/ false
输入可重复地启用/禁用弹出窗口...如此接近!
对于此问题,我确实有另一种想法/备份计划:如果无法通过Chrome偏好设置以编程方式禁用弹出窗口,我想是在关闭“云打印”设置的情况下创建Chrome配置文件并共享它由于ChromeDriver似乎具有用于设置配置文件目录的命令行标志/参数,因此在两次测试之间可能会起作用。但是,如果我们可以正确使用Chrome偏好设置的话,将会变得非常容易。
我还有一些辅助问题可以简化此操作,如果您知道该怎么做,请发表评论:
向Selenium.Chrome where can I find a list of all available ChromeOption arguments? C#大喊大叫,这是Google或SO上唯一使我指向Chrome偏好设置的搜索结果。我希望对此有更好的文档...