2013-05-31 3 views
0

Я использую Capybara для тестирования небольшого веб-приложения, которое я пишу. Он отказывается выбирать нужный элемент из выделения. Вот код:Capybara не выбирает элемент из списка

before do 
    fill_in 'Assignment', with: "blah blah blah" 
    select student.name, from: "assignment[student_id]" 
    end 

Я пробовал каждый поддерживаемый формат в поле «от». Я использовал идентификатор, имя и текст ярлыка, чтобы попытаться выбрать правильный элемент. Я даже загрузил сервер rails в тесте и вручную выполнил шаги моего теста в консоли. Независимо от того, что я делаю, капибары не ногами назад:

cannot select option, no option with text 'John Doe' in select box 'assignment[student_id]' 

Как было сказано выше, я взбивали сервера рельсы в тестовой среде, а затем вручную добавить пользователей в базу данных так же, как я делал в моих тестах , Я на 100% уверен в том, что есть вариант с текстом «John Doe» в задании select box [student] ». Это заставляет меня думать, что я должен использовать метод select неправильно. Может кто-нибудь просветить меня?

+0

Можете ли вы добавить код для окна выбора, просто чтобы быть уверенным. – Matt

+0

Попробуйте запустить что-то вроде 'all ('# assign [student_id]> option'). Each {| el | puts el.text (: all)} ', чтобы проверить, существует ли такая опция. –

ответ

0

Нужно ли выбрать from: имя поля выбора или идентификатор? Попробуйте с ID вместо (предполагающего стандартного стиля формы):

select student.name, from: "assignment_student_id" 

Если вы осмотрите источник на выборе элемента вы можете подтвердить поля ID.

Использует ли значение элемент опции, а не текст? Опять же, проверьте и посмотрите, что такое ценность «Джон Доу» и посмотрите, работает ли она с помощью student.id.

select student.id, from: "assignment[student_id]" 

Наконец, вы пробовали синтаксис в документации, содержащей страницу?

+0

Если 'select' не находит элемент по имени, он также не найдет его по id, так как [этот метод поддерживает любой из них] (http://rubydoc.info/github/jnicklas/capybara/master/Capybara/ Узел/Действия # выберите-instance_method). –

+0

Также 'select' проверяет только текст опции, поэтому ваш второй совет также неверен. –

0

Проблема была не в выборе кода. Я забыл, как работает FactoryGirl. Я вызвал сборку через отношения с пользователем, созданным Factory Girl, а затем попытался присвоить этот результат учащемуся через let. К сожалению, поскольку let ленив, он не создавался, когда это было необходимо, поэтому в основном страница вызывалась до того, как объект-ученик был даже создан. Я переместил код в свой оператор let в ранее, а затем назначил ученика, используя let и User.students.first.

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