2015-08-21 4 views
1

Я работаю в Rails 4.2.1 и делаю тестирование с использованием Capybara 2.4. У меня проблема с некоторыми полями ввода, которые не заполняются с использованием метода capybara fill_in.Capybara fill_in не работает

Я не получаю сообщение об ошибке ElementNotFound, я получаю это:

ожидается: "2018-01-10" получил: ""

(по сравнению с использованием ==)

Вот код ошибки: Примечание: fill_in работает для полей электронной почты, пароля и имени программы, но не для primary_training_start, primary_comp_start и primary_comp_end.

it 'create program' do 
    visit '/' 
    fill_in 'Email', with: '[email protected]' 
    fill_in 'Enter Your Password', with: 'test123' 
    click_on 'Log In' 
    fill_in 'Program Name', with: 'My Training' 
    find('.exclusive').click 
    click_on 'Next Step' 
    all('.creator-wayfinder li')[1].click 
    expect(page).to have_content('SET THE SCHEDULE') 
    fill_in 'primary_training_start', with: '2018-01-10' 
    fill_in 'primary_comp_start', with: '2018-02-10' 
    fill_in 'primary_comp_end', with: '2018-03-10' 
    expect(find_field('primary_training_start').value).to eq('2018-01-10') 
    expect(find_field('primary_comp_start').value).to eq('2018-02-10') 
    expect(find_field('primary_comp_end').value).to eq('2018-03-10') 
    click_on 'Show Program Schedule' 
    end 

А вот HTML для primary_training_start поля:

  <div> 
      <mark>Start Training</mark> 
      <span class="datepicker" date-format="M/d/yyyy" date-set="{{program.training_calendar_details.primary_training_start}}"> 
       <input required 
       ng-model="program.training_calendar_details.primary_training_start" 
       name="primary_training_start" 
       type="text" tabbable tabindex="0" /> 
      </span> 
      <errors for="primary_training_start" model="program.training_calendar_details.primary_training_start"></errors> 
      </div> 

Я попытался это: Capybara won't fill in form fields (although it finds them), но не имели никакой удачи.

+1

ли эти поля под контролем какой-то JS виджет? Если это так, то передача ключей непосредственно элементу (который является fill_in) может быть изменена обработчиками JS. –

ответ

3

Попробуйте имеющий идентификатор для входа

<input required 
ng-model="program.training_calendar_details.primary_training_start" 
name="program[training_calendar_details][primary_training_start]" 
id="primary_training_start" 
type="text" tabbable tabindex="0" /> 

FILL_IN использовать первый параметр, как идентификатор

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