我想在webdriver Firefox实例上使用" new选项卡而不是window"选项。 1 /我创建了一个带有此选项的配置文件,但是当我使用配置文件时,很多选项都可以,但不是这个选项。 2 /在加载配置文件后,我尝试更改代码中的选项,但它不起作用。 我的代码:
profile = webdriver.FirefoxProfile(os.path.join(s_path, name))
profile.set_preference("browser.link.open_newwindow.restriction", 0)
profile.set_preference("browser.link.open_newwindow", 3)
profile.set_preference("browser.link.open_external", 3)
profile.set_preference("browser.startup.homepage","http://www.google.fr")
profile.update_preferences()
print(os.path.join(s_path, name))
driver = webdriver.Firefox(set_profile())
一切正常(开始主页为google.fr),但此选项不合适。
似乎Selenium在临时目录中复制了个人资料。 users.js有错误的行:
user_pref("browser.link.open_newwindow", 2);
Python 3.4.2,Windows 7,Firefox 39.0,Selenium lib 2.46
答案 0 :(得分:4)
根据我的研究,browser.link.open_newwindow
是冻结设置,并且它始终与值2
同步。如果您挖掘了硒Python绑定的来源,您会发现在设置自定义设置后应用set of frozen
settings。
请注意,在java
bindings中,这组默认冻结设置是明确硬编码的:
/**
* Profile preferences that are essential to the FirefoxDriver operating correctly. Users are not
* permitted to override these values.
*/
private static final ImmutableMap<String, Object> FROZEN_PREFERENCES =
ImmutableMap.<String, Object>builder()
.put("app.update.auto", false)
.put("app.update.enabled", false)
.put("browser.download.manager.showWhenStarting", false)
.put("browser.EULA.override", true)
.put("browser.EULA.3.accepted", true)
.put("browser.link.open_external", 2)
.put("browser.link.open_newwindow", 2) // here it is
// ...
来自Firefox only supports windows not tabs的一些解释:
这是一个已知问题,不幸的是我们不会支持标签。
我们强制Firefox在新窗口中打开所有链接。我们无法访问 标签知道何时切换。当我们搬到牵线木偶时(Mozilla 项目)在未来我们应该能够做到这一点,但现在它是 按预期工作
解决方法是change the target
of a link manually - 可能不适用于所有情况,具体取决于新链接的打开方式。
答案 1 :(得分:0)
"browser.link.open_newwindow"
是冻结的首选项,这意味着它不能使用profile.set_preference("browser.link.open_newwindow", 3)
解决方案是改用profile.DEFAULT_PREFERENCES["frozen"]["browser.link.open_newwindow"] = 3
。 (可以使用set_preference
设置其他非冻结的首选项)