【问题标题】:Rspec failed for Javascript tests headless chrome on Github actionsRspec 在 Github 操作上的 Javascript 测试 headless chrome 失败
【发布时间】:2021-02-05 21:56:07
【问题描述】:

我正在使用 Github 操作来运行 Rspec 测试,这些测试具有许多功能测试和少量 javascript。所有其他测试通过,但 Javascript 测试失败。有没有办法使用 github 操作使用 javascript 运行 rspec capaybara 测试。 以下是我的水豚助手配置

Capybara.server = :puma, { Silent: true }

Capybara.register_driver :chrome_headless do |app|
  options = ::Selenium::WebDriver::Chrome::Options.new

  options.add_argument('--headless')
  options.add_argument('--no-sandbox')
  options.add_argument('--window-size=1400,1400')

  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

Capybara.javascript_driver = :chrome_headless

# Setup rspec
RSpec.configure do |config|
  #config.before(:each, type: :system) do
  #  driven_by :rack_test
  #end

  config.before(:each, type: :system, js: true) do
    driven_by :chrome_headless
  end
end

我收到 Javascript 测试错误的错误

2) Visitor signs up with valid email and password
     Failure/Error: width = page.evaluate_script("$('#LeftNavPaneContent').width();")
     Capybara::NotSupportedByDriverError:
       Capybara::Driver::Base#evaluate_script
     # ./spec/features/javascript/navigation_toggle_spec.rb:12:in `block (2 levels) in <top (required)>'
  3) Login and out it should redirect to the dashboard and allow you to log out
     Failure/Error: page.driver.browser.navigate.refresh
     NoMethodError:
       undefined method `navigate' for #<Capybara::RackTest::Browser:0x00005589b2afd070>
     # ./spec/features/login_logout/login_spec.rb:15:in `block (2 levels) in <top (required)>'

以下是我的 chromedriver 操作文件

run:  |
  sudo apt-get -yqq install libpq-dev
  sudo apt-get install google-chrome-stable
.
.
.
  run: |
   export DISPLAY=:99
   chromedriver --url-base=/wd/hut &
   sudo Xvfb -ac :99 -screen 0 1280/1024/24 > /dev/null 2>&1 & # optional
   bundle exec rspec

这些测试在本地通过并且没有问题。我认为这是因为这些测试中有 Javascripts 我正在使用 js: true 但似乎它无法正常工作。任何帮助

【问题讨论】:

  • 您的测试是否真的被指定为系统规范(在规范上键入元数据)?从他们的目录位置,他们可能被设置为功能规范而不是系统..
  • 我添加了类型功能,但仍然出现同样的错误。
  • 如果您希望它们成为系统测试,您应该添加类型系统(这是您在块之前在 rspec 中配置的内容

标签: javascript ruby-on-rails selenium capybara rspec-rails


【解决方案1】:

我在rails_helper 中使用了以下配置,并且成功了。

Capybara.register_driver :headless_chrome do |app|
  capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
      chromeOptions: { args: %w[--headless --disable-gpu] },
      'goog:loggingPrefs': {
          browser: 'ALL'
      }
    )

  options = ::Selenium::WebDriver::Chrome::Options.new

  options.add_argument('--headless')
  options.add_argument('--no-sandbox')
  options.add_argument('--window-size=1400,1400')

  Capybara::Selenium::Driver.new(
      app,
      browser: :chrome,
      desired_capabilities: capabilities,
      options: options
    )
end

Capybara.default_driver = :headless_chrome

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 2022-12-18
    • 2018-09-11
    • 2020-02-29
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多