Блокировка всплывающих окон в Google Chrome, вызывающая проблемы с тестами Capybara / Rspec - PullRequest
10 голосов
/ 12 октября 2011

Я пишу некоторые автоматизированные тесты с использованием Capybara / RSpec, я выбираю / настраиваю драйвер с помощью этого небольшого кусочка рубина:

Capybara.register_driver :selenium_chrome do |app|
  Capybara::Selenium::Driver.new(app, :browser => :chrome)
end

Я проверяю, нажимается ли кнопка, которую я нажимаюоткрыв всплывающее окно и что окно отображает контент, который он должен.Проблема в том, что когда тест открывает окно, блокировщик всплывающих окон Google Chrome блокирует его, что приводит к сбою тестов.Отключение блокировщика из меню настроек не работает.Кроме того, я боюсь, что после их запуска на сервере это вызовет ту же проблему.

Есть ли способ автоматически отключить всплывающий блок для тестов?

Ответы [ 7 ]

7 голосов
/ 09 ноября 2015

Вы можете позвонить водителю с параметрами.

ChromeOptions options = new ChromeOptions();
options.addArguments("-incognito");
options.addArguments("--disable-popup-blocking");

ChromeDriver driver = new ChromeDriver(options);
7 голосов
/ 27 января 2012

У нас была очень похожая проблема.Как говорит Джон, переключатель командной строки больше не работает.Мы попытались использовать пользовательский профиль, но он, похоже, был перезаписан.

В конечном итоге он был решен путем ручного отключения всплывающих окон с использованием самого WebDriver:

driver.get('chrome://settings/advanced')
driver.find_element_by_id('privacyContentSettingsButton').click()
driver.find_element_by_name('popups').click()

Какой,Я думаю, это больше похоже на то, что в любом случае сделал бы пользователь; -)

3 голосов
/ 12 октября 2011

Попробуйте:

Capybara::Selenium::Driver.new(app, :browser => :chrome, :switches => %w[--disable-popup-blocking)

Это упоминается на странице RubyBindings в Selenium wiki.

1 голос
/ 20 мая 2016

Версия JavaScript

Вы можете сделать в JavaScript, например, так ...

var chrome = require('selenium-webdriver/chrome.js');
var options = new chrome
              .Options()
              .addArguments('-incognito', '--disable-popup-blocking');

var driver = new webdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(options)
    .build();

driver.manage().timeouts().setScriptTimeout(10000);

return driver;
1 голос
/ 03 ноября 2011

Я не думаю, что вы можете в данный момент. Имея ту же проблему. Похоже, что в текущей версии chrome отключение блокировщика всплывающих окон больше не является переключателем командной строки.

http://codesearch.google.com/codesearch#OAMlx_jo-ck/src/chrome/common/chrome_switches.cc&exact_package=chromium

0 голосов
/ 24 июня 2019

Я попробовал следующий параметр chromeOptions.addArguments ("- disable-web-security");и работает правильно .. Отключает все всплывающие окна

0 голосов
/ 08 марта 2016

Для работы с последним драйвером Chrome, попробуйте это

css_selector_for_iframe = 'iframe[name="settings"]'

driver.get('chrome://settings/content')
iframe = driver.find_element_by_css_selector(css_selector_for_iframe)
driver.switch_to_frame(iframe)
driver.find_element_by_name('popups').click()
click_element(driver, '#content-settings-overlay-confirm')
driver.switch_to_default_content()
...