Google Chrome的弹出窗口屏蔽功能对Capybara/Rspec测试造成了问题。

11

我正在使用Capybara/RSpec编写一些自动化测试,通过这段Ruby代码来选择/配置驱动程序:

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

我正在测试一个按钮是否打开了弹出窗口,以及该窗口是否显示应该显示的内容。问题在于,当测试打开窗口时,Google Chrome的弹出窗口阻止器会阻止它,导致测试失败。从选项菜单中禁用阻止器无效。此外,我担心一旦在服务器上运行这些测试会导致相同的问题。

有没有办法自动为测试禁用弹出块?


+1!我们在使用 Selenium WebDriver(chromedriver)运行自动化测试时遇到了相同的问题... - hwjp
7个回答

8

我们曾经遇到过类似的问题。像John所说,命令行开关不再起作用。我们尝试使用自定义配置文件,但似乎被覆盖了。

最终通过WebDriver手动禁用弹出窗口解决了问题:

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

我猜用户通常更愿意这样做;-)


我认为这可以作为一个前置条件测试设置(setup())在实际测试之前完成,对吗?谢谢你的提示。 - David
这很棒,但是你如何通过名称找到元素呢?当我的浏览器从Selenium启动时,我没有右键单击然后“检查”的选项,可能是因为弹出窗口本身阻止了我与浏览器的交互。编辑:我解决了自己的问题。我可以通过其关联文本(在我的情况下为“您不是授权用户”)引用按钮。然后我可以使用Selenium单击它。 - Jeff Wright

8
您可以使用选项调用驱动程序。
ChromeOptions options = new ChromeOptions();
options.addArguments("-incognito");
options.addArguments("--disable-popup-blocking");

ChromeDriver driver = new ChromeDriver(options);

3

试试这个:

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

这在 Selenium 维基上的 RubyBindings 页面中有提到。


我已经尝试过了,但是我收到了以下错误信息:未知选项:{:switches=>["--disable-popup-blocking"]}。 - The Sheek Geek
1
确保你使用的是最新版本的selenium-webdriver gem。 - jarib

2

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;

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()

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

“--disable-web-security”听起来像是一个标志,不应该仅仅为了弹出窗口阻止而关闭... - Alexis Pautrot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接