Как использовать селекторы Capybara, чтобы правильно выбрать поле - PullRequest
0 голосов
/ 06 июля 2011

У меня есть форма, которая позволяет мне добавлять / редактировать категории и подкатегории в одной форме. Эта форма использует 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})" 

Тогда это работает для редактирования, но не для нового сценария.

Есть ли способ использовать один и тот же селектор для новых и редактировать сценарии в моем случае?

Мне лучше использовать другой тип селектора в моей форме? Если да, у кого-нибудь есть рекомендации?

1 Ответ

0 голосов
/ 07 июля 2011

Используйте идентификатор для уникальных элементов и комбинации классов для повторяющихся элементов.С правильной комбинацией селекторов класса и идентификатора вы всегда получите уникального ребенка.Имейте в виду, что вы можете группировать селекторы по одному элементу.

Итак

Данная категория существует

wait_for_xpath = '//element(@class = "categoryClass")'

А категория "Книги" имеет подкатегорию "Художественная литература"

wait_for_xpath = "//element(contains (@class, 'categoryClass') and (@id, 'bookId'))//element(@id='fiction')"

и т. Д.

...