在 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);
我是 运行 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);