簡體   English   中英

capybara chrome無頭確認對話框

[英]capybara chrome headless confirm dialog

我試圖在rspec Ruby on Rails中使用無頭模式的chrome和capybara / selenium,並在嘗試單擊確認對話框時出現錯誤

Capybara.register_driver(:headless_chrome) do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
    chromeOptions: { args: %w[headless disable-gpu test-type window-size=1920x1080] }
  )

  driver = Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    desired_capabilities: capabilities
  )

  driver
end

Capybara.server = :puma
Capybara.javascript_driver = :headless_chrome



scenario 'delete movie' do
  login_as user
  visit edit_public_movie_path(movie)

  expect(page).to have_selector('span[ng-click="ctrl.deleteMovie()"]')
  find('span[ng-click="ctrl.deleteMovie()"]').click

  page.driver.browser.switch_to.alert.accept

  wait_for_ajax(wait_after: 1)
  expect(page).to have_content('Click here to upload movie (Max: 500 MB)')
end

並得到了這個錯誤

 Event movie success delete movie
 Failure/Error: page.driver.browser.switch_to.alert.accept

 Selenium::WebDriver::Error::NoSuchAlertError:
   no alert open
     (Session info: headless chrome=59.0.3071.115)
     (Driver info: chromedriver=2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.5 x86_64)

使用普通模式,它可以正常工作。 似乎硒不支持無頭模式或需要其他方法來做到這一點。 有任何想法嗎?

更新(解決)

所以,我花了很多時間找工作環境。

您需要持續構建chrome,因為預覽版本存在錯誤 你可以通過linuxMac這些腳本來獲取它

這是我的水豚配置

 Capybara.register_driver(:headless_chrome) do |app|
   capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
                                        chromeOptions: {
                                          args: %w[headless disable-gpu disable-popup-blocking no-sandbox window-size=1920x1920],
                                          binary: "#{Dir.home}/chromium-latest-#{platrofm}/latest/#{chrome_file}"
                                        })
  driver = Capybara::Selenium::Driver.new(app,
                                        browser: :chrome,
                                        desired_capabilities: capabilities)

  driver
end

Capybara.server = :puma
Capybara.javascript_driver = :headless_chrome
Capybara.default_max_wait_time = 20
Capybara.server_port = 55305

def platform
  if /linux/ =~ RUBY_PLATFORM
    "linux"
  else
    "macosx"
  end
end

def platform_linux?
  platform == "linux"
end

def chrome_file
  if platform_linux?
    "chrome"
  else
    "Chromium.app/Contents/MacOS/Chromium"
  end
end

你應該使用page.driver.browser.switch_to.alert.accept而不是page.accept_alert

有同樣的問題。 請使用chromeOptions中的disable-popup-blocking。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM