如何使用 Rspec、Capybara 和 Chromedriver 为模态设置系统测试

问题描述 投票:0回答:1

我是新手,据我目前的理解,你不能将 javascript 与 Rspec 测试混合在一起(?)。

对于我的第一个 Rspec/Capybara 系统测试,我希望用户登录,然后单击模态链接以查看模态是否存在(然后与模态交互)。

相关的gem(这是一个2017年的老项目)

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platform: :mri
  gem 'rspec-rails', '~> 3.5.0'
  gem 'puma', '~> 3.0'
end

group :test do
  gem 'capybara', '~> 3.6.0'
  gem 'factory_girl_rails', '~> 4.7'
  gem 'faker'
  gem 'selenium-webdriver', '~> 3.0.0'
  gem "database_cleaner", "~> 1.5"
  gem 'shoulda-matchers', '~> 3.1'
  gem 'launchy'
end

rspec

scenario "Fans in Canada can sign in, visit signed in home page, and log out in" do

    create_fan_in_canada

    visit root_path

    #fist LOG IN link
    within('#myNavbar') do
      expect(page).to have_link "LOG IN"
    end

    #second LOG IN link
    within('.follow-login') do
      expect(page).to have_link "LOG IN"
    end

    within('#myNavbar') do
      click_link('LOG IN')
    end  

    fill_in "Email", with: @fan.email
    fill_in "Password", with: @fan.password
    click_button "Sign in"
    find('.dropdown-toggle').click
    expect(page).to have_link "Logout"
    expect(page).to have_current_path root_path

    ## MODAL TEST ##

    find('#actionLink').click
    within('#actionModal') do
      page.should have_content('#fan1') 
    end
    expect(page).to have_css '#fan1'

    ## MODAL TEST END ##

    click_link "Logout"
    expect(page).to have_css '#splash_page_loads'
  end

 ############
 ############ 

Selenium chromedrive 已下载并按照 Selenium 文档放入路径文件中,此 Rails-helper 代码由 此博客提供。

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

Capybara.javascript_driver = :selenium_chrome

结果:

如果我不包含

## MODAL TEST ##
代码,测试就会通过。

如果我包含

## MODAL TEST ##
,则测试会失败,并出现来自控制器的此错误:

Failures:

  1) Splash and devise: Fans in Canada can sign in, visit signed in home page, and log out in
     Failure/Error:
       respond_to do |format|
         format.js    # this goes to actionMain.js.erb
       end
     
     ActionController::UnknownFormat:
       ActionController::UnknownFormat
     # ./app/controllers/actionmodal_controller.rb:41:in `actionMain'

如果我将

:js => true
添加到场景中,我会收到此错误:

Failures:

  1) Splash and devise: Fans in Canada can sign in, visit signed in home page, and log out in
     Failure/Error:
       within('#myNavbar') do
         expect(page).to have_link "LOG IN"
       end
     
     NameError:
       uninitialized constant Selenium::WebDriver::Error::ElementNotInteractableError

让我相信我要么设置错误,要么我必须在它自己的单独场景中添加模态测试,专门用于 javascript Chromedriver。

但是,如果我这样做,我将无法事先登录用户等,可能需要存根它们,但我也有多个模态,其中有许多链接可以更改模态的内容,我会稍后也想测试一下,我不相信可以处理 Chromedriver。

如何设置 Capybara 和 Rspec,以便在常规系统测试中顺利打开模式?因为仅处理 Chromedriver 或其他处理正常用户操作的广泛系统测试似乎并不正确。

ruby-on-rails rspec selenium-chromedriver capybara
1个回答
0
投票

名称错误: 未初始化的常量 Selenium::WebDriver::Error::ElementNotInteractableError

可能是由于使用了 Capybara 和 selenium-webdriver 版本不兼容造成的。

© www.soinside.com 2019 - 2024. All rights reserved.