3

我知道这是一个老问题,我已经尝试过一些帖子的答案,例如禁用 Chrome 通知 (Selenium)

不幸的是,没有任何效果,浏览器通知弹出窗口仍然出现并中断了我的模拟。

我的 Chrome 版本是 75.0.3770.100 (Official Build) (64-bit),在 MacOS 上运行。


编辑:

在此问题被标记为如何使用 Selenium for Firefox 和 Chrome 禁用推送通知的副本之后?,我已经尝试了解决方案,但它仍然对我不起作用。

            String chromePath = "somepath/selenium-2.48.2/chromedriver";
            System.setProperty("webdriver.chrome.driver", chromePath);


            Map<String, Object> prefs = new HashMap<String, Object>();
            prefs.put("profile.default_content_setting_values.notifications", 2);
            prefs.put("credentials_enable_service", false);
            prefs.put("profile.password_manager_enabled", false);
            ChromeOptions options = new ChromeOptions();
            options.setExperimentalOption("prefs", prefs);
            options.addArguments("start-maximized");
            options.addArguments("disable-infobars");
            options.addArguments("--disable-extensions");
            options.addArguments("--disable-notifications");

            driver = new ChromeDriver(options);

以下是我尝试过的原始解决方案。

        String chromePath = "somepathto/chromedriver";
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("--disable-notifications");
        System.setProperty("webdriver.chrome.driver", chromePath);
        WebDriver driver = new ChromeDriver(chromeOptions);

        // Login
        try {
            driver.get(sometestURL);
            driver.manage().window().maximize();    
            // do some operations
        } catch (Exception ex) {
            System.out.println(ex);
        }

我也试过这个:

        String chromePath = "somepath/selenium-2.48.2/chromedriver";
        Map<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("profile.default_content_setting_values.notifications", 2);
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.setExperimentalOption("prefs", prefs);
        System.setProperty("webdriver.chrome.driver", chromePath);
        WebDriver driver = new ChromeDriver(chromeOptions);

但是通知仍然出现在窗口左上角的“xxxxwebsite想要显示通知允许阻止”。

我做错了什么?

4

1 回答 1

0

我刚刚在 Windows 上使用 Chrome 75.0.3770.142(64 位)和 ChromeDriver 75.0.3770.90(见下面的日志)针对网站https://www.nzz.ch进行了测试(因为它要求显示推送通知的权限)。我使用了 Selenium 3.14.0。

08:27:37.184 [main] INFO  i.g.bonigarcia.wdm.WebDriverManager - Exporting webdriver.chrome.driver as C:\Users\xxxxx\.m2\repository\webdriver\chromedriver\win32\75.0.3770.90\chromedriver.exe
Starting ChromeDriver 75.0.3770.90 (a6dcaf7e3ec6f70a194cc25e8149475c6590e025-refs/branch-heads/3770@{#1003}) on port 32864

对我来说,此处和链接资源中也提到的开关可靠地停用了弹出窗口的显示:

options.addArguments("--disable-notifications");

profile.default_content_setting_values.notifications在我的情况下,不需要更改默认设置。所以如果这对你不起作用

  • 要么你没有正确设置选项,
  • 您正在使用(可能已过时)不支持它的 ChromeDriver 版本,或者
  • 出于某种原因,在 MacOS 上,驱动程序没有实现它。

PS:对我来说,在 Firefox 和 Chrome 中,即使在显示通知弹出窗口期间,单击链接并导航到其他页面也没有问题。您在那里有任何问题还是弹出窗口只是一个烦恼?

于 2019-07-22T01:37:17.267 回答