2016-12-05 7 views
2

私は、ポルテジストにドライバを持っていて、セレンに移行しなければなりませんでしたが、ブラウザ(Mozilla firefox 50.0.02)が開き、テストケースを開始すると、クリックイベントは次のページに進むことができません。capybaraのクリック方法は、セレンのwebdriverで動作しません

テストケース(クリックメソッドが動作しないので、明らかに、追加見つからないため、停止)

require 'rails_helper' 

feature 'creation of advices' do 
    scenario'Sucessfully create an advice' do 
    do_brand_login 
    # find('a[href="/clients/advice_requests"]') 
    page.click_link 'Requests' 
    # find(:xpath,'//a[@href="/clients/advice_requests"]').trigger('click') 
    click_link 'Add' 

    #Primeiro passo 
    find('input[id="clients_advice_request_request_type_id-selectized"]').click 
    find('div[data-value="1"]').click 

    find('input[id="clients_advice_request_contact_ids-selectized"]').click 
    first('div[class^="option"]').click 

    find('input[id="clients_advice_request_po_id-selectized"]').click 
    find('div[data-value="3"]').click 

    find('input[id="clients_advice_request_lead_contact_id-selectized"]').click 
    first('div[class^="option"]').click 

    fill_in 'Your reference', with: 'Valkyre' 
    fill_in 'Campaign name', with: 'Mjolnir for everyone' 
    fill_in 'Advertised product/service', with: 'Mjolnir' 

    click_button 'Next' 
    #Segundo passo 
    expect(page).to have_content "Details" 
    # find('textarea[id="clients_advice_request_instructions"]').send_keys('Put yout hammer here') 

    fill_in 'Instructions', with: 'Put yout hammer here' 

    first('.icheckbox_flat').click 
    # click 'Do you require an estimate?' 
    find('.bootstrap-switch').click 
    fill_in 'By when do you require the estimate?', with: 2.days.from_now 
    fill_in 'By when do you require the advice?', with: 2.days.from_now 
    find('input[id="clients_advice_request_trademark_search_id-selectized"]').click 
    page.find('div[class="option"]', text: 'No').click 
    find('input[id="clients_advice_request_country_ids-selectized"]').click 
    find('div[data-value="1"]').click 
    find('div[data-value="2"]', text: 'Austria').click 

    click_button 'Next' 

    #Terceiro passo 
    drop_in_dropzone Rails.root.join('public/favicon.ico') 


    # wait_for_ajax 
    # click_button 'Next' 
    # wait_for_ajax 
    expect(page).to have_content "Review materials can't be blank" 
    find('button[class="btn btn-primary btn-icon icon-right"]').click 
    # drop_in_dropzone Rails.root.join('public/favicon.ico') 

    puts current_url 
    require 'pry'; binding.pry 
    expect(page).to have_content "Ovewview" 
    #Quarto passo 
    click_button 'Submit' 
    end 
end 

Railsのヘルパー

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
# Prevent database truncation if the environment is production 
abort("The Rails environment is running in production mode!") if Rails.env.production? 
require 'spec_helper' 
require 'rspec/rails' 
require 'capybara/rails' 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 
# Add additional requires below this line. Rails is not loaded until this point! 
require "selenium-webdriver" 

# Requires supporting ruby files with custom matchers and macros, etc, in 
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are 
# run as spec files by default. This means that files in spec/support that end 
# in _spec.rb will both be required and run as specs, causing the specs to be 
# run twice. It is recommended that you do not name files matching this glob to 
# end with _spec.rb. You can configure this pattern with the --pattern 
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`. 
# 
# The following line is provided for convenience purposes. It has the downside 
# of increasing the boot-up time by auto-requiring all files in the support 
# directory. Alternatively, in the individual `*_spec.rb` files, manually 
# require only the support files necessary. 
# 
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

# Checks for pending migration and applies them before tests are run. 
# If you are not using ActiveRecord, you can remove this line. 
ActiveRecord::Migration.maintain_test_schema! 

RSpec.configure do |config| 
    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.include LoginHelper 
    config.include DropZoneHelper 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # RSpec Rails can automatically mix in different behaviours to your tests 
    # based on their file location, for example enabling you to call `get` and 
    # `post` in specs under `spec/controllers`. 
    # 
    # You can disable this behaviour by removing the line below, and instead 
    # explicitly tag your specs with their type, e.g.: 
    # 
    #  RSpec.describe UsersController, :type => :controller do 
    #  # ... 
    #  end 
    # 
    # The different available types are documented in the features, such as in 
    # https://relishapp.com/rspec/rspec-rails/docs 
    config.infer_spec_type_from_file_location! 

    # Filter lines from Rails gems in backtraces. 
    config.filter_rails_from_backtrace! 
    # arbitrary gems may also be filtered via: 
    # config.filter_gems_from_backtrace("gem name") 
end 

spec_helper

require 'capybara/rspec' 
require 'capybara/dsl' 
# require 'capybara/poltergeist' 
Capybara.default_max_wait_time = 30 
Capybara.configure do |c| 
    c.javascript_driver = :selenium 
    c.default_driver = :selenium 
    c.app_host = "http://www.192.168.0.25.xip.io:3001" 
end 

# This file was generated by the `rails generate rspec:install` command. Conventionally, all 
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. 
# The generated `.rspec` file contains `--require spec_helper` which will cause 
# this file to always be loaded, without a need to explicitly require it in any 
# files. 
# 
# Given that it is always loaded, you are encouraged to keep this file as 
# light-weight as possible. Requiring heavyweight dependencies from this file 
# will add to the boot time of your test suite on EVERY test run, even for an 
# individual file that may not need all of that loaded. Instead, consider making 
# a separate helper file that requires the additional dependencies and performs 
# the additional setup, and require it from the spec files that actually need 
# it. 
# 
# The `.rspec` file also contains a few flags that are not defaults but that 
# users commonly want. 
# 
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration 
RSpec.configure do |config| 
    # rspec-expectations config goes here. You can use an alternate 
    # assertion/expectation library such as wrong or the stdlib/minitest 
    # assertions if you prefer. 

    config.expect_with :rspec do |expectations| 
    # This option will default to `true` in RSpec 4. It makes the `description` 
    # and `failure_message` of custom matchers include text for helper methods 
    # defined using `chain`, e.g.: 
    #  be_bigger_than(2).and_smaller_than(4).description 
    #  # => "be bigger than 2 and smaller than 4" 
    # ...rather than: 
    #  # => "be bigger than 2" 
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    # rspec-mocks config goes here. You can use an alternate test double 
    # library (such as bogus or mocha) by changing the `mock_with` option here. 
    config.mock_with :rspec do |mocks| 
    # Prevents you from mocking or stubbing a method that does not exist on 
    # a real object. This is generally recommended, and will default to 
    # `true` in RSpec 4. 
    mocks.verify_partial_doubles = true 
    end 

    # This option will default to `:apply_to_host_groups` in RSpec 4 (and will 
    # have no way to turn it off -- the option exists only for backwards 
    # compatibility in RSpec 3). It causes shared context metadata to be 
    # inherited by the metadata hash of host groups and examples, rather than 
    # triggering implicit auto-inclusion in groups with matching metadata. 
    config.shared_context_metadata_behavior = :apply_to_host_groups 

# The settings below are suggested to provide a good initial experience 
# with RSpec, but feel free to customize to your heart's content. 
=begin 
    # This allows you to limit a spec run to individual examples or groups 
    # you care about by tagging them with `:focus` metadata. When nothing 
    # is tagged with `:focus`, all examples get run. RSpec also provides 
    # aliases for `it`, `describe`, and `context` that include `:focus` 
    # metadata: `fit`, `fdescribe` and `fcontext`, respectively. 
    config.filter_run_when_matching :focus 

    # Allows RSpec to persist some state between runs in order to support 
    # the `--only-failures` and `--next-failure` CLI options. We recommend 
    # you configure your source control system to ignore this file. 
    config.example_status_persistence_file_path = "spec/examples.txt" 

    # Limits the available syntax to the non-monkey patched syntax that is 
    # recommended. For more details, see: 
    # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ 
    # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ 
    # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode 
    config.disable_monkey_patching! 

    # Many RSpec users commonly either run the entire suite or an individual 
    # file, and it's useful to allow more verbose output when running an 
    # individual spec file. 
    if config.files_to_run.one? 
    # Use the documentation formatter for detailed output, 
    # unless a formatter has already been configured 
    # (e.g. via a command-line flag). 
    config.default_formatter = 'doc' 
    end 

    # Print the 10 slowest examples and example groups at the 
    # end of the spec run, to help surface which specs are running 
    # particularly slow. 
    config.profile_examples = 10 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = :random 

    # Seed global randomization in this process using the `--seed` CLI option. 
    # Setting this allows you to use `--seed` to deterministically reproduce 
    # test failures related to randomization by passing the same `--seed` value 
    # as the one that triggered the failure. 
    Kernel.srand config.seed 
=end 
end 

ログインヘルパー

module LoginHelper 
    def do_brand_login 
    visit 'http://yggdrasil.192.168.0.25.xip.io:3001/users/sign_in' 
    fill_in 'user_email', with: '[email protected]' 
    fill_in 'user_password', with: '3dfosfey' 
    click_button 'Log in' 
    end 
end 
+0

のようなものを - あなたのケースでは、ヘルパーdo_brand_loginは、特にログインが完了したことを示している最後に何かを期待する必要がありますログイン? –

+0

1)アドバイスの作成はSucessfullyアドバイス 失敗/エラーを作成します。click_linkは カピバラ:: ElementNotFoundを「追加」: –

+0

あなたは上の「追加」のテキストとのリンクがあることを確認しています「追加」リンクを見つけることが はできません。ページ? 'スリープ3を加える。要求をクリックした後にpage.htmlを入れて、そのページがあなたが期待しているものであることを確認してください –

答えて

1

click_button/click_link/clickなどは、クリックトリガーが完了するまで待つという保証はありません。そのため、行動が引き起こす目に見える変化を期待することによって、カピバラが完了するための行動を引き起こした後に、カピバラを待たせる必要があります。最初のクリックに続く2回目のクリックは、一致する要素が最初のページに既に存在する場合、最初のクリックの直後にクリックしようとします。これにより、最初のクリックをキャンセルしたり、そのアクションを中断したり、クリックが無視されるようにランダムに表示されたりすることがあります。正確にあなたが得るエラーは何

expect(page).to have_content("You are now logged in!") # Or whatever content is shown 
関連する問題