Google Chrome中的弹出窗口阻止导致Capybara / Rspec测试问题

时间:2011-10-12 15:50:11

标签: google-chrome webdriver capybara popup-blocker

我正在使用Capybara / RSpec编写一些自动化测试,我使用这一点ruby来选择/配置驱动程序:

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

我正在测试我点击的按钮是否打开弹出窗口,窗口是否显示应该显示的内容。问题是当测试打开窗口时,Google Chrome弹出窗口阻止程序会阻止它,导致测试失败。从选项菜单中禁用阻止程序不起作用。另外,我担心一旦我在服务器上运行它们就会导致同样的问题。

有没有办法自动禁用测试的弹出窗口?

7 个答案:

答案 0 :(得分:7)

我们遇到了一个非常相似的问题。就像约翰所说,命令行开关不再有效。我们尝试使用自定义配置文件,但它似乎被覆盖了。

最终通过手动使用WebDriver禁用弹出窗口来解决它:

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

我猜,这更像是用户会做的事情; - )

答案 1 :(得分:7)

您可以使用选项调用驱动程序。

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

ChromeDriver driver = new ChromeDriver(options);

答案 2 :(得分:3)

试试这个:

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

在Selenium wiki的RubyBindings页面上提到了这一点。

答案 3 :(得分:1)

我认为你现在不能。有同样的问题。在当前版本的chrome中,似乎没有禁用弹出窗口阻止程序的命令行开关。

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

答案 4 :(得分:1)

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;

答案 5 :(得分:0)

要使用最新的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()

答案 6 :(得分:0)

我尝试了以下设置 chromeOptions.addArguments(“-disable-web-security”); 并且可以正常工作..它将禁用所有弹出窗口