gpt4 book ai didi

ruby-on-rails - capybara Chrome headless (headless)确认对话框

转载 作者:行者123 更新时间:2023-12-03 17:37:38 26 4
gpt4 key购买 nike

我正在尝试在 rspec Ruby on Rails 中使用带有 capybara / Selenium 的 headless (headless) chrome 模式,并在尝试单击确认对话框时出现错误

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)

使用共模,它可以正常工作而不会出错。似乎 Selenium 不支持 headless (headless)模式或需要其他方法来做到这一点。有任何想法吗?

更新(已解决)

所以,我花了很多时间寻找工作环境。

您需要最后一次构建 Chrome ,因为预览版本有 bug .您可以通过这些脚本获得它 linuxMac

这是我的 capybara 配置
 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 中的禁用弹出窗口阻止。

关于ruby-on-rails - capybara Chrome headless (headless)确认对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com