У меня есть форма, которая позволяет мне добавлять / редактировать категории и подкатегории в одной форме. Эта форма использует AJAX, и для ее тестирования я использовал Capybara с некоторыми селекторами.
Проблема с селекторами, кажется, есть тонкие различия между тем, когда я создаю новую категорию с подкатегориями, когда я редактирую категорию с подкатегориями.
Вот мой сценарий создания:
@javascript @wip
Scenario: Create new category with sub categories
Given I am on the new category page
When I fill in "Name" with "Main" within the parent fields
And I follow "Add sub category"
And I fill in "Name" with "Sub1" within the 1st sub category fields
And I follow "Add sub category"
And I fill in "Name" with "Sub2" within the 2nd sub category fields
And I follow "Add sub category"
And I fill in "Name" with "Sub3" within the 3rd sub category fields
And I press "Save"
Then I should be on the "Main" category page
And I should see "Main"
And I should see "Sub1"
And I should see "Sub2"
And I should see "Sub3"
Работает с селекторами:
when /the parent fields/
"table tr:nth-child(1)"
when /the (\d+)(?:st|nd|rd|th) sub category fields/
pos = $1.to_i + 2
"table tr:nth-child(#{pos})"
В форме:
= form_for @category do |f|
%table
%tr
%td= f.label :name
%td= f.text_field :name
%tr
%td(colspan=2)
%b Sub categories
- f.fields_for :children do |child|
= render "child_fields", :f => child
%tr
%td= link_to_add_fields "Add sub category", f, :children
%tr
%td= f.submit 'Save'
child_fields частично:
%tr.subs
%td= f.label :name
%td= f.text_field :name
Когда я использую те же селекторы, хотя в моем сценарии редактирования я не могу выбрать 2-ю категорию. Вот моя функция редактирования категории:
@javascript @wip
Scenario: Edit category with sub categories
Given a category exists
And category "Books" has sub category "Fiction"
And category "Books" has sub category "Non-Fiction"
And I am on the edit page for category "Books"
When I fill in "Name" with "Cars"
And I fill in "Name" with "Coupe" within the 1st sub category fields
And I fill in "Name" with "Sports" within the 2nd sub category fields
And I press "Save"
Then I should be on the "Cars" category page
And I should see "Cars"
And I should see "Coupe"
And I should see "Sports"
Если я изменю свой селектор на:
when /the (\d+)(?:st|nd|rd|th) sub category fields/
pos = $1.to_i * 2 + 1
"table tr:nth-child(#{pos})"
Тогда это работает для редактирования, но не для нового сценария.
Есть ли способ использовать один и тот же селектор для новых и редактировать сценарии в моем случае?
Мне лучше использовать другой тип селектора в моей форме? Если да, у кого-нибудь есть рекомендации?