如何使用 Selenium Webdriver 处理浏览器级别的通知

Posted

技术标签:

【中文标题】如何使用 Selenium Webdriver 处理浏览器级别的通知【英文标题】:How to handle browser level notification using Selenium Webdriver 【发布时间】:2016-11-16 23:46:34 【问题描述】:

我正在使用 Selenium Webdriver 和核心 Java 自动化一些测试用例,在 chrome 浏览器中单击按钮时的一个测试用例我收到浏览器级别通知“显示带有选项允许和阻止的通知”。我想选择允许选项。谁能知道如何使用 Selenium webdriver 处理这种通知。 请参阅以下快照以获取更多详细信息

【问题讨论】:

【参考方案1】:

请按以下步骤操作:

A) 使用 JAVA:

对于旧 Chrome 版本 (

//Create a instance of ChromeOptions class
ChromeOptions options = new ChromeOptions();

//Add chrome switch to disable notification - "**--disable-notifications**"
options.addArguments("--disable-notifications");

//Set path for driver exe 
System.setProperty("webdriver.chrome.driver","path/to/driver/exe");

//Pass ChromeOptions instance to ChromeDriver Constructor
WebDriver driver =new ChromeDriver(options);

对于新的 Chrome 版本 (>50):

//Create a map to store  preferences 
Map<String, Object> prefs = new HashMap<String, Object>();

//add key and value to map as follow to switch off browser notification
//Pass the argument 1 to allow and 2 to block
prefs.put("profile.default_content_setting_values.notifications", 2);

//Create an instance of ChromeOptions 
ChromeOptions options = new ChromeOptions();

// set ExperimentalOption - prefs 
options.setExperimentalOption("prefs", prefs);

//Now Pass ChromeOptions instance to ChromeDriver Constructor to initialize chrome driver which will switch off this browser notification on the chrome browser
WebDriver driver = new ChromeDriver(options);

对于火狐:

    WebDriver driver ;
    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("permissions.default.desktop-notification", 1);
    DesiredCapabilities capabilities=DesiredCapabilities.firefox();
    capabilities.setCapability(FirefoxDriver.PROFILE, profile);
    driver = new FirefoxDriver(capabilities);
    driver.get("http://google.com");

B) 使用 Python:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

option = Options()

option.add_argument("--disable-infobars")
option.add_argument("start-maximized")
option.add_argument("--disable-extensions")

# Pass the argument 1 to allow and 2 to block
option.add_experimental_option("prefs",  
    "profile.default_content_setting_values.notifications": 1 
)

driver = webdriver.Chrome(chrome_options=option, executable_path='path-of- 
driver\chromedriver.exe')
driver.get('https://www.facebook.com')

C) 使用 C#:

ChromeOptions options = new ChromeOptions();
options.AddArguments("--disable-notifications"); // to disable notification
IWebDriver driver = new ChromeDriver(options);

【讨论】:

user2085714 询问如何启用通知,而不是禁用通知。 我可以知道如何从 javascript 中获取相同的内容吗?【参考方案2】:
WebDriver driver ;
        FirefoxProfile profile = new FirefoxProfile();
        profile.setPreference("permissions.default.desktop-notification", 1);
        DesiredCapabilities capabilities=DesiredCapabilities.firefox();
        capabilities.setCapability(FirefoxDriver.PROFILE, profile);
        driver = new FirefoxDriver(capabilities);
        driver.get("your Web site"); 

【讨论】:

【参考方案3】:

处理此类要求的步骤:

    打开 Firefox 配置文件管理器(转到开始菜单,输入 firefox.exe -p 以启动配置文件管理器) 创建一个新的配置文件(例如,配置文件的名称是 customfirefox) 导航到about:permissions 进行必要的配置并保存配置文件

现在使用新创建的配置文件通过调用 Firefox 来运行您的测试

ProfilesIni ffProfiles = new ProfilesIni();
FirefoxProfile profile = ffProfiles.getProfile("customfirefox");
WebDriver driver = new FirefoxDriver(profile);

这将始终使用带有保存在配置文件中的自定义配置的 firefox。

希望这对你有用..!!!

祝你好运。

【讨论】:

嗨,很抱歉忘记浏览器。我正在使用 chrome 浏览器。 chrome浏览器的任何解决方案【参考方案4】:

您可以使用以下代码允许 chrome 发送通知:

ChromeOptions options=new ChromeOptions();
Map<String, Object> prefs=new HashMap<String,Object>();
prefs.put("profile.default_content_setting_values.notifications", 1);
//1-Allow, 2-Block, 0-default
options.setExperimentalOption("prefs",prefs);
ChromeDriver driver=new ChromeDriver(options);

它非常适合我。让我知道它是否不适合你。 干杯!!

【讨论】:

【参考方案5】:

据我了解,这个弹出窗口不是 javascripts one.so selenium 不会处理它们。同样的,身份验证弹出窗口也在那里,我们通过像 http://username:password@www.test.com 这样的黑客来自动化,这里在 url 本身中提供用户名和密码。 在您的情况下,Praveen 提到您必须创建浏览器配置文件(FF 或 chrome)。在 chrome 中,可以通过所需的 cabilities 选项或 chrome 选项功能创建配置文件。

【讨论】:

【参考方案6】:

更新: 请使用隐身模式以避免此类浏览器级别的通知和 cookie 问题。

【讨论】:

我试过了,但这对我不起作用。此弹出窗口似乎不是警报... 尝试增加等待时间并检查。 否则我们必须使用 ROBO 类来接受/关闭提示 不,这个弹出窗口根本不是警报。要禁用它,我只是添加了 options.addArguments("disable-notifications");它有效,而您的答案却没有 这无论如何都行不通,因为这不是警报。

以上是关于如何使用 Selenium Webdriver 处理浏览器级别的通知的主要内容,如果未能解决你的问题,请参考以下文章

如何使用selenium webdriver来判断一个网页加载完毕

Selenium & webdriver.io 如何使用 executeScript?

如何使用selenium webdriver来判断一个网页加载完毕

如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?

如何在 ruby​​ 中使用 Selenium WebDriver (selenium 2.0) 客户端设置选项

如何在 Java 中使用 Selenium WebDriver (Selenium 2) 输入文本框?