在 selenium 自动化期间绕过 "External protocol request" 弹出窗口

Bypass "External protocol request" popup during selenium automation

我是 运行 mac 和 ubunto 上的自动化(使用黄瓜、selenium 网络驱动程序、junit)

在自动化过程中,我点击了一个 link 非 http 协议

出现 "External protocol request" 弹出窗口。

它阻止我测试网页的其余部分。

如何轻松绕过它?

我想也许可以编写一个什么都不做的 jar,然后将其注册到这个外部协议,但这无济于事,因为这个弹出窗口仍然会出现。

也许使用其他浏览器会有帮助?

还有其他建议吗?

您有 2 个可能的选择。

1) 是 运行 具有预定义配置文件的 chrome,您在其中手动禁用了协议处理(通过界面或配置文件)(配置文件设置中的 "Local State" 文件,您应在相应部分添加 "waze": false,您可以搜索 "mailto" 以了解它在哪里)。

2) 另一种方法是在所有测试开始之前将设置放入测试的构造函数中(我将编写一个算法,因为它取决于您的框架和语言):

  • 导航到 "chrome://settings"
  • 按 link 和 css 选择器“#advanced-settings-expander”
  • 使用 css 选择器“#privacyContentSettingsButton”按下按钮
  • 使用 css 选择器“#handlers-section input[value=block]”
  • 按需要的选项按下标签
  • 通过 css 选择器“#content-settings-overlay-confirm”按完成

通过使用 AutoIT(windows 环境的第三方工具)。 *)安装它(无论是 64 位还是 32 位 OS) *) 使用 Finder 工具(AutoIT v3 Window 信息),确定 "Do Nothing"

的位置

示例:位置 (700,430)

*)In AutoIT ScriptEditor add the below code MouseClick("left","700,430) and save it as .au3 file format.

*)In your script add this code Runtime.getRuntime().exec("D:\AutoIt\AutoItTest.exe");

*)Run your script.

我正在使用带有硒的 chromedriver 和 python。 我遇到了同样的问题,下面的代码对我有用-

driver.execute_script("window.confirm = function(msg) { return true; }")

prefs = {"protocol_handler.excluded_schemes":{"afp":True,"data":True,"disk":True,"disks":True,"file":True,"hcp":True,"intent":True, "itms-appss":True, "itms-apps":True,"itms":True,"market":True,"javascript":True,"mailto":True,"ms-help":True,"news":True,"nntp":True,"shell":True,"sip":True,"snews":False,"vbscript":True,"view-source":True,"vnd":{"ms":{"radio":True}}}}    

chrome_options.add_experimental_option("prefs",prefs)

假设您想抑制以 "sip://"
开头的链接的协议处理程序弹出窗口 只需在 "protocol_handler.excluded_schemes"

中添加一个额外条目 "sip":True

对于那些正在寻找 Javascript-selenium 或 webdriverJS 的答案的人来说,这里是你如何做到的。 chromeOptions = { 'args': ['--test-type', '--start-maximized', 'use-fake-ui-for-media-stream',], 'prefs': { protocol_handler: { excluded_schemes: { 'iamlegend': false } } }, };

用您的协议替换 'iamlegend'

对于 Firefox,以下 C# 代码添加了协议处理程序:

firefoxOptions.SetPreference("network.protocol-handler.external.your_custom_protocol", true);
firefoxOptions.SetPreference("network.protocol-handler.expose.your_custom_protocol", true);
firefoxOptions.SetPreference("network.protocol-handler.warn-external.your_custom_protocol", false);

Internet Explorer 在注册表中存储协议​​处理程序(仅适用于本地 WebDriver):

var baseKey = @"Software\Microsoft\Internet Explorer\ProtocolExecute\your_custom_protocol";
var protocolKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(baseKey, true) ?? Microsoft.Win32.Registry.CurrentUser.CreateSubKey(baseKey);

protocolKey?.SetValue("WarnOnOpen", 0, Microsoft.Win32.RegistryValueKind.DWord);