2017-03-06 89 views
0

我有以下的测试Rspec的水豚的webkit找不到按钮标签

require "rails_helper" 

RSpec.feature "Menu", :type => :feature do 

let!(:articles) { create_list(:article, 10) } 
let!(:quotes) { create_list(:quote, 2) } 

before { visit "/" } 

scenario "should not have Javascript errors" do 
    Capybara.current_driver = :webkit 

    page.find("#menu-button").click 

    expect(page).not_to have_errors 
end 

end 

,也未能与消息

水豚:: ElementNotFound: 无法找到的CSS “#菜单键”

我也试过

click_on "Open Menu" 

click_button "Open Menu" 

click_link "Open Menu" 

page.find_button(id: 'menu-button').click 

find("#menu-button").click 

我想测试基础6具有的画布外特性。

application.html.erb文件

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 

<title><%= content_for?(:title) ? yield(:title) : "Stargazers.news" %></title> 

<%= stylesheet_link_tag "application" %> 
<%= javascript_include_tag "application", 'data-turbolinks-track' => true %> 
<%= csrf_meta_tags %> 
</head> 
<body> 
<div class="off-canvas-wrapper"> 

    <div class="off-canvas position-left" id="offCanvas" data-off-canvas> 
    <button class="close-button" arial-label="Close menu" type="button" data-close></button> 

    <div id="search"> 
     <%= form_tag({controller: "/pages", action:"search"}, method: "get") do %> 
     <%= label_tag(:search, "Search for:") %> 
     <%= text_field_tag(:search) %> 
     <%= submit_tag("Search") %> 
     <% end %> 
    </div>  
    </div> 

    <div class="off-canvas-content" data-off-canvas-content> 
    <div class="top-bar"> 
     <div class="top-bar-right"> 
     <button id="menu-button" type="button" class="button" data-toggle="offCanvas">Open Menu</button> 
     </div> 
    </div> 

    <p class="notice"><%= notice %></p> 
    <p class="alert"><%= alert %></p> 

    <%= yield %> 
    </div> 

</div> 
</body> 
</html> 

的index.html.erb文件

<div id="quote"> 
    <%= @quote.body %> 
</div> 

<% @articles.each do |article| %> 
    <article> 
    <header> <%= article.title%> </header> 
    <div class="content-summary"> <%= article.body %> </div> 
    </article> 
    <hr/> 
<% end %> 

rails_helper.rb文件

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 

abort("The Rails environment is running in production mode!") if Rails.env.production? 
require 'spec_helper' 
require 'rspec/rails' 
require 'capybara/rspec' 
require 'simple_bdd/rspec' 

ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 
    Capybara.javascript_driver = :webkit 
    config.include FactoryGirl::Syntax::Methods 

    config.include RSpecHtmlMatchers 

    config.include Devise::Test::IntegrationHelpers, type: :feature 

    config.use_transactional_fixtures = true 

    config.before(:suite) do 
    DatabaseCleaner.strategy = :truncation 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

    config.infer_spec_type_from_file_location! 
    config.filter_rails_from_backtrace! 
end 

Shoulda::Matchers.configure do |config| 
    config.integrate do |with| 
    with.test_framework :rspec 
    with.library :rails 
    end 
end 

的Gemfile

source 'https://rubygems.org' 

git_source(:github) do |repo_name| 
    repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") 
    "https://github.com/#{repo_name}.git" 
end 

gem 'rails', '~> 5.0.1' 
gem 'pg', '~> 0.18' 
gem 'puma', '~> 3.0' 
gem 'sass-rails', '~> 5.0' 
gem 'foundation-rails' 
gem 'uglifier', '>= 1.3.0' 
gem 'coffee-rails', '~> 4.2' 
gem 'jquery-rails' 
gem 'turbolinks', '~> 5' 
gem 'jbuilder', '~> 2.5' 
gem "paperclip", "~> 5.0.0" 
gem 'devise' 

group :development, :test do 
    gem 'byebug', platform: :mri 
    gem 'factory_girl_rails' 
    gem 'rspec-rails', '~> 3.5' 
    gem 'rspec-html-matchers' 
    gem 'ffaker' 
    gem 'simple_bdd' 
end 

group :development do 
    gem 'web-console', '>= 3.3.0' 
    gem 'listen', '~> 3.0.5' 
    gem 'spring' 
    gem 'spring-watcher-listen', '~> 2.0.0' 
    gem "better_errors" 
end 

group :test do 
    gem 'capybara-webkit' 
    gem 'database_cleaner' 
    gem 'shoulda-matchers', '~> 3.1' 
end 

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] 

我的Qt版本是5.5.1 ,我在Ubuntu 16.04

回答

2

默认情况下,水豚没有发现不可见元素, 99%的时间无法与不可见的元素进行交互。这是因为它旨在模拟用户的行为,并且用户无法与其在页面上看不到的内容进行交互。

更新:现在你已经包括整个测试问题更清楚。在访问'/'发生之前,您不会将测试设置为使用:webkit。这意味着:racktest驱动程序访问该页面,但随后您将切换到实际未加载任何页面的webkit驱动程序,因此没有任何内容。而非手动设置current_driver在测试中,你应该只被标记用js: true(或driver: :webkit)元数据测试

scenario "should not have Javascript errors", js: true do 
    ... 
end 

这将设定电流驱动器Capybara.javascript_driver的值(您已设置为:webkit)在访问发生之前。

此外,您的database_cleaner设置缺乏 - 它应该是建议的设置 - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example - 从after到append_after的交换对测试稳定性非常重要,并且对驱动程序类型的检查将有助于加速测试。

最后,也没有必要,如果你已经使用RSpec.feature

+0

hello @ThomasWalpole,'off-canvas-content'是可见元素,我也尝试过'page.driver.console_messages'和'page.driver.error_messages',我没有得到任何错误。但是,当我评论了'page.find(“#menu-button”),点击'并且得到了'expected#以响应'has_errors?'消息。我觉得这个消息很困惑,因为我认为这意味着webkit没有安装。 –

+0

@stupidone拥有完整的测试信息使其更清晰 - 我已经更新了我的答案。 –

0

尝试增加visible: falsefind通话,就像这样:

page.find("#menu-button", visible: false).click 
+0

同样的消息到指定:type => :feature。它没有工作。 –