最近一个小伙伴遇到个问题,使用Selenium在做自动化测试的时候出现弹窗,但是使用Selenium+Java处理常见的Alert/Confirm弹出框无法找到;于是我就给他介绍了webDriver处理弹窗的所有方法;最后还是不行,于是我就开始怀疑了,决定亲自试一试这到底是个什么妖魔鬼怪。
其中在试的时候我尝试了Selenium切换到所有的Alert,Iframe,window,有点诡异屡试不爽,都找不到,然后仔细一看弹窗,其实并不属于网页Dom里面的元素,突然发现与一般的弹窗不一样;
在弹窗右边的出现一个小图标,属于Chrome浏览器自带的
如下图:
找错方向了,不是Dom里面的代码弹窗,而是浏览器permissions(权限许可)询问弹窗
在浏览器中输入这个地址chrome://settings/content即可看到所有的类型:
这下就简单了,这个通知应该是可以在启动浏览器之前进行初始化参数设置的:
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.CheromeDriver;
import org.openqa.selenium.chrome.CheromeOptions
ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
//2就是代表禁止加载的意思
prefs.put("profile.default_content_setting_values.notifications", 2);
options.setExperimentalOption("prefs", prefs);
//或者
options.addArguments("disable-infobars");
所有Chromium命令行开关列表如下:
https://peter.sh/experiments/chromium-command-line-switches/#disable-permissions-api 往期关于切换窗口的推文: Selenium切换窗口driver.switchTo().window(handle)