2016-07-01 3 views
0

Я начал использовать Capybara несколько дней назад, и я никогда раньше не использовал Selenium. Я хочу посмотреть, как мои тесты выполняют в beowser и используют для него gem selenium-webdriver. У меня есть следующий тест в Капибара:Capybara с: js => true вызывает тесты с ошибкой

RSpec.feature 'Authentication', :type => :feature do 

    def register_with_form 
     visit '/' 
     click_on 'Account' 
     click_on 'Register' 
     fill_in 'Email', :with => '[email protected]' 
     fill_in 'Name', :with => 'John' 
     fill_in 'Last name', :with => 'Smith' 
     fill_in 'Password', :with => '1234567890' 
     fill_in 'Password confirmation', :with => '1234567890' 
     find('.testing-sign-up-class') 
     click_button 'Sign up' 
     expect(page).to have_css '.hd-title', 'Get Started' 
    end 

    scenario 'User registers' do 
     register_with_form 
     expect(page).to have_css '.hd-title', 'Get Started' 
     expect(page).to have_css '.alert-success', 'Welcome! You have signed up successfully.' 
     expect(page).to have_css '.panel-title', 'What would you like to use GridHub for?' 
    end 

    scenario 'User sign out', :js => true do 
     register_with_form 
     click_on 'Account' 
     click_on 'Logout' 
     expect(page).to have_css '.alert-success', 'Signed out successfully.' 
    end 
end 

:js => true Добавление к любому scenario сломал тест. консоль показывает:

1) Authentication When not registered User sign out 
    Failure/Error: click_button 'Sign up' 

    Selenium::WebDriver::Error::UnknownError: 


Element is not clickable at point (606, 23.73333740234375). Other element would receive the click: <input autocomplete="off" name="term" id="term" class="form-control nav-search-field main-ac autocomplete ui-autocomplete-input" placeholder="search items" data-url="/search" type="text"> 

Я добавил гем database_cleaner, мой spec_helper.rb имеет следующий код:

config.before(:each, type: :feature) do 
    driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test 

    if !driver_shares_db_connection_with_specs 
     DatabaseCleaner.strategy = :truncation 
    end 
    end 

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

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

И мой bin/rspec файл имеет следующую строку:

config.use_transactional_fixtures = false 

Спасибо.

UPDATE

Я предполагаю, что есть может быть проблема в браузере что-то еще. Причина в некоторых ситуациях, когда тест открывает браузер (я запустил firefox и chrome), а некоторые элементы могут быть «ниже» окна браузера, в таких ситуациях тесты не выполняются, причина не может найти нужную кнопку. Если у меня есть время прокрутить окно браузера, некоторые тесты могут быть успешными.

+0

Это может быть полезно для вас http://stackoverflow.com/questions/11335303/cant-find-element-to-click-on-using-capybara-rails3 –

ответ

0

При использовании любого из драйверов, поддерживающих JS click_button просто нажимает кнопку, а затем перемещается. Он не ждет, пока что-либо изменится на странице, так как он не знает, какие изменения ожидать. Я предполагаю, что когда ваш тестовый вызов register_with_form и возвращается, он сразу же нажимает ссылку «Учетная запись», которая находится на той же странице, что и форма. Это закончило бы отмену подачи заявки и перейдите на страницу, у которой нет ссылки на выход. Чтобы исправить это, вам нужно сделать последнюю строку register_with_form примерно как expect(page).to have_content('Welcome!'), чтобы она не возвращалась до завершения регистрации.

Кроме того, используйте рекомендуемую настройку database_cleaner от https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example (добавление append_after очень важно), а не то, что у вас есть, или вы в конечном итоге будете трудно диагностировать проблемы, когда ваша база данных начинает очищаться до завершения запросов и т. Д.

+0

спасибо, но это не сработало. У меня есть информация об обновлении. – verrom

+0

@verrom вы сделали больше, чем обновили вопрос, вы полностью заменили ошибку, которая была там с другой, что делает ее совершенно другим вопросом –

Смежные вопросы