2013-07-26 4 views
2

У меня есть следующая форма, и я хочу проверить, присутствует ли текстовое поле или нет. Как я могу это сделать ? Проверить наличие текстового поля формы с capybara

<%= form_for(ownership, remote: true) do |f| %> 
    <div> 
    <%= f.text_field :confirm, value: nil %> 
    <%= f.hidden_field :start_date, value: Time.now %> 
    </div> 
    <%= f.submit t('button.ownership.take.confirmation'), class: "btn btn-small"%> 
<% end %> 

Вот мой тест:

describe "for not confirmed ownership" do 

    before do 
    FactoryGirl.create(:agreed_ownership, user: current_user, product: product) 
    be_signed_in_as(current_user) 
    visit current_page 
    end 

    # it { should_not have_text_field(confirm) } 
    it { should_not have_button(t('button.ownership.take.confirmation')) } 
end 

ответ

4

Вы бы использовать has_css? ожидания:

it "should have the confirm input field" do 
    visit current_page 

    expect(page).to have_css('input[type="text"]') 
end 

Вы можете использовать дополнительные селекторы JQuery стиле для фильтрации других атрибутов на входе поле тоже. Например, 'input[type="text"][name*="confirm"]' будет выбирать для confirm, который появляется в атрибуте name поля ввода.

Чтобы установить ожидание поле не является присутствует, вы будете использовать to_not на ваши ожидания: expect(page).to_not have_css('input[type="text"]')

Bonus: Вот старше, should -стиль синтаксис:

it "should have the confirm input field" do 
    visit current_page 

    page.should have_css('input[type="text"]') 
end 

it "shouldn't have the confirm input field" do 
    visit current_page 

    page.should_not have_css('input[type="text"]') 
end 
+0

Большое спасибо ! И можете ли вы помочь мне с заполнением этой области? Могу ли я сделать что-то вроде ввода 'fill_in '[type =" text "] [name =" confirm "]', с помощью:« Что-то »? –

+0

Для заполнения поля с помощью ['fill_in'] (http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions#fill_in-instance_method) вам нужно использовать« локатор », который строка Capybara проверяет текст 'label' поля, атрибут name и атрибут id. Если вы не хотите использовать какие-либо из этих атрибутов, вы также можете сделать что-то вроде 'find ('input [type =" text "] [name =" confirm "]'). Set (" Something ")', но Я не большой поклонник, так как этот синтаксис кажется довольно далеким от того, как ваш пользователь будет испытывать/использовать ваше приложение, что является условной целью использования Capybara. –

+0

Хорошо, я пробовал, но это не сработало: 'Capybara :: ElementNotFound: Не удалось найти css 'input [type = \" text \ "] [name = \" confirm \ "]" ' –

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