如何让Firefox在同一个窗口中打开通过WebDriver打开的所有链接?

时间:2013-02-22 16:48:31

标签: firefox selenium-webdriver webdriver selenium-firefoxdriver

我想在新窗口中打开同一窗口中的所有链接。 我试过了

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

是否有另一种方法可以在同一窗口中打开链接?

6 个答案:

答案 0 :(得分:1)

我找到了解决方法!

JavascriptExecutor js = (JavascriptExecutor) driver;
String script = "document.getElementById('yourFormOrAnchorId').target=''";
js.executeScript(script);

之后,您可以选择锚点或任何表单元素,然后单击或提交。目标页面将在同一选项卡中打开。

这基本上会更改当前的HTML页面,以便锚点和表单不会强制浏览器打开新的选项卡或窗口。对于测试,这可能不是最理想的,但它简化了测试的编写过程。

答案 1 :(得分:1)

试试这个......  修改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);

如果您使用的是Google Chrome浏览器,则只需安装this扩展程序即可完成其余任务。此扩展程序也可以方便地在新选项卡中打开弹出窗口,这些弹出窗口通常在新窗口中打开。 (首先,您需要从给定位置下载扩展名.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);

答案 2 :(得分: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)下的设置并始终使用新窗口

答案 3 :(得分:0)

根据Selium docs(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进行编辑来完成配置文件的详细配置。

希望这有帮助!

答案 4 :(得分:0)

在硒配置文件中:

  

C:\ Python27 \ Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver_prefs.json

更改以下行:

"browser.link.open_newwindow": 2,

收件人:

"browser.link.open_newwindow": 3,

我对其进行了测试

答案 5 :(得分:-1)

实际上,Selenium不对在新窗口或同一窗口中打开的页面负责。它完全取决于您用于执行的浏览器设置。

为了便于使用Firefox浏览器

如果要在新窗口中打开所有链接。执行这些步骤

  1. 打开工具
  2. 点击选项
  3. 点击标签菜单
  4. 选中Open new windows in a new tab instead.
  5. 现在点击打开窗口的链接。它将在同一窗口的新选项卡中打开。