2017-03-06 100 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。它沒有工作。 –