【问题标题】:Popup blocking in Google Chrome causing issues with Capybara/Rspec testsGoogle Chrome 中的弹出窗口阻止导致 Capybara/Rspec 测试出现问题
【发布时间】:2011-12-06 06:29:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • +1!我们在使用 selenium WebDriver (chromedriver) 运行自动化测试时遇到了同样的问题......

标签: google-chrome webdriver capybara popup-blocker


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 我已经尝试过了,但出现以下错误:未知选项:{:switches=>["--disable-popup-blocking"]}
  • 确保您使用的是最新版本的 selenium-webdriver gem。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    我猜这更像是用户无论如何都会做的事情;-)

    【讨论】:

    • 我认为这将在运行实际测试之前作为前提条件测试 setup() 完成,对吗?感谢您的提示。
    • 这很好,但是您如何真正通过名称找出元素呢?当我的浏览器从 Selenium 启动时,我没有选择右键单击然后“检查”,大概是因为弹出窗口本身阻止了我与浏览器交互。编辑:我解决了我自己的问题。我可以通过其相关文本引用该按钮(在我的情况下,“您不是授权用户”)。然后我可以使用 Selenium 来点击它。
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      要使用最新的 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】:

        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;
        

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • "--disable-web-security" 听起来像是一个标志,不能仅仅因为弹出窗口阻止行为而关闭......
          猜你喜欢
          • 2010-10-14
          • 1970-01-01
          • 2013-05-08
          • 2016-05-17
          • 2013-03-17
          • 1970-01-01
          • 1970-01-01
          • 2020-05-04
          • 1970-01-01
          相关资源
          最近更新 更多