Капибара: локатор действия fill_in - PullRequest
3 голосов
/ 08 сентября 2011

Итак, у меня есть эта спецификация

describe "visit /signup" do
    before(:each) do
        get signup_path
    end
    it "has an email input field" do
        page.has_field?("#user_email")
    end
    it "accepts an email address" do
        page.fill_in('#user_email', :with=>Faker::Internet.email)
    end
end

Первый тест (имеет адрес электронной почты) проходит, второй не проходит с

Failure/Error: page.fill_in('#user_email', :with=>Faker::Internet.email)
Capybara::ElementNotFound:
   cannot fill in, no text field, text area or password field with id, name, or label '#user_email' found

Элемент input [type = 'text'] существует на странице с этим идентификатором DOM, попытался найти его с идентификатором с хэшем и без него и использовать его input: name в качестве локатора.

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 08 сентября 2011

Это потому, что вы используете get, когда вы должны использовать visit внутри блока before. Это:

before(:each) do
  get signup_path
end

Должно быть так:

before(:each) do
    visit signup_path
end

В противном случае вы говорите Rack::Test посетить этот путь, не Капибара! Небольшое отличие, которое часто запутывает многих людей!

2 голосов
/ 08 сентября 2011

возможно, вам следует удалить #, например,

fill_in('user_email', :with=>Faker::Internet.email)
0 голосов
/ 08 сентября 2011

Я думаю, что fill_in не на странице. Просто используйте fill_in:

describe "visit /signup" do
    before(:each) do
        get signup_path
    end
    it "has an email input field" do
        page.has_field?("#user_email")
    end
    it "accepts an email address" do
        fill_in('#user_email', :with=>Faker::Internet.email)
    end
end
...