Как заставить Firefox открывать все ссылки, открытые через WebDriver, в одном окне?

Я хочу открыть все ссылки в одном окне, а не в новом окне. Я старался

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

Есть ли другой способ открыть ссылки в том же окне?


person Petko Petkov    schedule 22.02.2013    source источник


Ответы (6)


Вы должны изменить параметры профиля 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) и всегда использовать новые окна.

person Matoussi Walid    schedule 04.10.2017

Я нашел обходной путь!

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

После этого вы можете выбрать якорь или любой из элементов формы и щелкнуть или отправить его. Целевая страница откроется в той же вкладке.

Это в основном изменяет текущую HTML-страницу, чтобы привязки и формы не заставляли браузер открывать новые вкладки или окна. Для тестирования это может быть неоптимальным, но это значительно упрощает написание тестов.

person Hubert Grzeskowiak    schedule 30.09.2014

Попробуйте... Измените параметры профиля 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, просто установите это расширение, и оно позаботится об остальной части задачи. Это расширение также удобно для открытия всплывающих окон в новых вкладках, которые обычно открываются в новых окнах. (Сначала вам нужно загрузить файл с расширением .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);
person Sameer Patil    schedule 16.01.2017

В конфигурационном файле селена:

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

изменить следующую строку с:

"browser.link.open_newwindow": 2,

to:

"browser.link.open_newwindow": 3,

я проверял это, и это сработало

person Urs    schedule 12.12.2018

Согласно документам 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.

надеюсь, что это помощь!

person Katlyn Anne Fairlamb    schedule 30.09.2014

На самом деле Selenium не отвечает за открытие страницы в новом окне или в том же окне. Это полностью зависит от настроек браузера, которые вы использовали для выполнения.

Возьмите браузер Firefox

Если вы хотите открыть все ссылки в новом окне. Сделайте эти шаги

  1. Открытые инструменты
  2. Нажмите «Параметры».
  3. Нажмите меню «Вкладки»
  4. Установите флажок Open new windows in a new tab instead.

Теперь щелкните ссылку, которая открывает окно. Он откроется в новой вкладке того же окна.

person Manigandan    schedule 25.02.2013
comment
Это не работает. Я все еще получаю новое окно, а не открываю его в том же окне, когда запускаю WebDriver. Когда я запускаю тот же тест вручную, он открывает ссылку в том же окне, как и должно. - person DarthOpto; 26.03.2014