我想在同一个窗口中打开所有链接,而不是在新窗口中。我试过了
profile.setPreference("browser.link.open_newwindow", 1)
但结果是:
WARNING: traffic.loop 0 error: Preference browser.link.open_external may not be overridden: frozen value=2, requested value=1
是否有另一种方法可以在同一窗口中打开链接?
我想在同一个窗口中打开所有链接,而不是在新窗口中。我试过了
profile.setPreference("browser.link.open_newwindow", 1)
但结果是:
WARNING: traffic.loop 0 error: Preference browser.link.open_external may not be overridden: frozen value=2, requested value=1
是否有另一种方法可以在同一窗口中打开链接?
您应该修改 firefox 配置文件参数:
profile = webdriver.FirefoxProfile()
profile.set_preference("browser.link.open_newwindow", 3)
profile.set_preference("browser.link.open_newwindow.restriction", 0)
driver = webdriver.Firefox(firefox_profile=profile)
如果此方法不起作用,您可以使用 firefox 选项设置偏好:
from selenium.webdriver.firefox.options import Options
opts = Options()
opts.set_preference("browser.link.open_newwindow.restriction", 0)
opts.set_preference("browser.link.open_newwindow", 3)
driver = webdriver.Firefox(firefox_options=opts)
(A) browser.link.open_newwindow - 用于 Firefox 标签中的链接:
3:将新窗口转移到新标签(默认)
2:允许链接打开一个新窗口
1:强制新窗口进入同一个选项卡
(B) browser.link.open_newwindow.restriction - 用于 Firefox 选项卡中的链接
0 : 将 (A) 下的设置应用到所有新窗口(甚至脚本窗口)
2 : 将 (A) 下的设置应用于普通窗口,但不适用于具有功能的脚本窗口(默认)
1:覆盖(A)下的设置并始终使用新窗口
我找到了解决方法!
JavascriptExecutor js = (JavascriptExecutor) driver;
String script = "document.getElementById('yourFormOrAnchorId').target=''";
js.executeScript(script);
之后,您可以选择您的锚点或任何表单元素并单击或提交。目标页面将在同一选项卡中打开。
这基本上改变了当前的 HTML 页面,因此锚点和表单不会强制浏览器打开新的选项卡或窗口。对于测试,这可能不是最理想的,但它大大简化了测试的编写。
在硒配置文件中:
C:\Python27\Lib\site-packages\selenium\webdriver\firefox\webdriver_prefs.json
更改以下行:
"browser.link.open_newwindow": 2,
至:
"browser.link.open_newwindow": 3,
我测试它并且它有效
试试这个... 修改 FireFox 配置文件参数“browser.link.open_newwindow.restriction”和“browser.link.open_newwindow”。
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.link.open_newwindow.restriction", 0);
profile.setPreference("browser.link.open_newwindow", 1);
如果您使用的是谷歌浏览器,那么只需安装此扩展程序,它将处理其余的任务。此扩展程序还可以方便地在通常在新窗口中打开的新选项卡中打开弹出窗口。(首先,您需要从给定位置下载扩展名 .crx 文件。)
ChromeOptions options = new ChromeOptions();
options.addExtensions(new File("/path/to/extension.crx"));
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
根据 Selium 文档(https://code.google.com/p/selenium/wiki/FirefoxDriver),以下属性 webdriver.firefox.profile 控制使用的 firefox 配置文件。
这是 Firefox 在启动时获取 browser.link.open_newwindow 的地方。要为您的测试创建新配置文件,您可以按照此处的说明https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles配置文件的详细配置可以是通过编辑配置文件的 pref.js 或启动配置文件并通过 about:config 编辑它来完成。
希望这有帮助!
实际上,Selenium 不负责在新窗口或同一窗口中打开的页面。它完全取决于您用于执行的浏览器设置。
以火狐浏览器为例
如果要在新窗口中打开所有链接。执行这些步骤
Open new windows in a new tab instead.
现在单击打开一个窗口的链接。它将在同一窗口的新选项卡中打开。