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

如何使Firefox在同一窗口中打开通过WebDriver打开的所有链接?,firefox,selenium-webdriver,webdriver,selenium-firefoxdriver,Firefox,Selenium Webdriver,Webdriver,Selenium Firefoxdriver,我想在同一窗口中打开所有链接,而不是在新窗口中打开。 我试过了 但结果是: WARNING: traffic.loop 0 error: Preference browser.link.open_external may not be overridden: frozen value=2, requested value=1 是否有其他方法可以在同一窗口中打开链接?实际上,Selenium不负责在新窗口或同一窗口中打开页面。这完全取决于执行时使用的浏览器设置 为了方便起见,使用Firefox浏

我想在同一窗口中打开所有链接,而不是在新窗口中打开。 我试过了

但结果是:

WARNING: traffic.loop 0 error: Preference browser.link.open_external may not be overridden: frozen value=2, requested value=1

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

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

为了方便起见,使用Firefox浏览器

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

  • 开放式工具
  • 单击选项
  • 单击选项卡菜单
  • 选中
    在新选项卡中打开新窗口的复选框。
  • 现在单击打开窗口的链接。它将在同一窗口的新选项卡中打开。

    根据Selium docs(),以下属性webdriver.firefox.profile控制使用的firefox配置文件

    firefox在启动时从中获取browser.link.open_newwindow。要为您的测试创建一个新的概要文件,您可以按照此处的说明进行配置文件的详细配置,可以通过编辑概要文件的pref.js或启动概要文件并通过about:config进行编辑来完成


    希望这对你有所帮助

    我找到了解决办法

    JavascriptExecutor js = (JavascriptExecutor) driver;
    String script = "document.getElementById('yourFormOrAnchorId').target=''";
    js.executeScript(script);
    
    之后,您可以选择锚定或任何表单元素并单击或提交它。目标页面将在同一选项卡中打开

    这基本上改变了当前的HTML页面,因此锚定和表单不会强制浏览器打开新的选项卡或窗口。对于测试来说,这可能是次优的,但它大大简化了测试的编写。

    试试这个。。。 修改FireFox配置文件参数“browser.link.open\u newwindow.restriction”“browser.link.open\u newwindow”。

    FirefoxProfile profile = new FirefoxProfile();
    profile.setPreference("browser.link.open_newwindow.restriction", 0);
    profile.setPreference("browser.link.open_newwindow", 1);
    
    如果您使用的是谷歌浏览器,那么只需安装扩展,它就可以完成剩下的任务。此扩展还便于在新选项卡中打开弹出窗口,这些选项卡通常在新窗口中打开。(首先,您需要从给定位置下载扩展名.crx文件。)


    您应该修改firefox配置文件参数:

    profile=webdriver.FirefoxProfile()

    profile.set\u首选项(“browser.link.open\u newwindow”,3)

    profile.set\u首选项(“browser.link.open\u newwindow.restriction”,0)

    driver=webdriver.Firefox(Firefox\u profile=profile)

    如果此方法不起作用,您可以使用firefox选项设置性能:

    来自selenium.webdriver.firefox.options导入选项

    opts=Options()

    opts.set\u首选项(“browser.link.open\u newwindow.restriction”,0)

    opts.set\u首选项(“browser.link.open\u newwindow”,3)

    driver=webdriver.Firefox(Firefox\u options=opts)


    (A) browser.link.open_newwindow-对于Firefox选项卡中的链接:

    3:将新窗口转移到新选项卡(默认)

    2:允许链接打开新窗口

    1:强制新窗口进入同一选项卡

    (B) browser.link.open_newwindow.restriction-用于Firefox选项卡中的链接

    0:将(A)下的设置应用于所有新窗口(甚至脚本窗口)

    2:将(A)下的设置应用于普通窗口,但不应用于脚本窗口 具有功能(默认)


    1:覆盖(A)下的设置,并始终在selenium配置文件中使用新窗口:

    C:\Python27\Lib\site packages\selenium\webdriver\firefox\webdriver\u prefs.json

    将以下行更改为:

    "browser.link.open_newwindow": 2,
    
    致:


    我对它进行了测试,结果成功了

    这不起作用。当我运行WebDriver时,我仍然得到一个新窗口,而不是在同一个窗口中打开。当我手动运行相同的测试时,它会在相同的窗口中打开链接。
    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);
    
    "browser.link.open_newwindow": 2,
    
    "browser.link.open_newwindow": 3,