Блокировка всплывающих окон в Google Chrome вызывает проблемы с тестами Capybara/Rspec

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

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

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

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

6 ответов


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

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

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

что, я думаю, больше похоже на то, что пользователь будет делать в любом случае; -)


вы можете вызвать драйвер с опциями.

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

ChromeDriver driver = new ChromeDriver(options);

попробуйте это:

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

об этом говорится в RubyBindings страница в вики Селена.


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

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


чтобы работать с последним драйвером 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()

Версия 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;