cucumber webrat нажмите на вторую ссылку удаления

#ruby-on-rails #cucumber #webrat

#ruby-on-rails #cucumber #webrat

Вопрос:

У меня есть сценарий, в котором я хочу выбрать ссылку «Удалить» на странице для второго элемента в таблице. Я просматривал click_link_within или использовал внутри, но это работает некорректно.

   Scenario: User deletes a staff member from the listing
    Given a staff exists with name: "Michael"
    And a staff exists with name: "Joe"
    And I am on the listing staff index page
    When I follow "Delete" for row containing "Joe"
    Then I should be on the listing staff index page
    And I should not see "Joe"
    And I should see "Michael"
  

Вот шаг, который я пытаюсь использовать:

 When /^I follow "([^"]*)" for row containing "([^"]*)"$/ do |button, text|
  click_link_within "//*[.//td[contains(.,#{text})]]", button
end
  

И вот код листинга в haml:

 %h1 Staff Listing 

%table
    %th Username
    %th Surname
    %th First Name

    - @staff.each do |staff|
        %tr
            %td= staff.username
            %td= staff.surname
            %td= staff.firstname
            %td= link_to "Edit", edit_staff_path(staff)
            %td= link_to "Delete", staff, :method => :delete
  

Ответ №1:

Для генерации правильных ссылок удаления rails использует javascript. Таким образом, вы получаете запрос на УДАЛЕНИЕ вместо GET, который выдала бы обычная ссылка. Поскольку webrat не обрабатывает javascript, это никак не может сработать. Проверьте Capybara как альтернативу webrat или webrat с selenium.

Комментарии:

1. У меня установлена Capybara, и я могу нажать на ссылку удаления, но не на вторую ссылку.

2. Установленная Capybara хороша, но вы должны убедиться, что используете ее вместо webrat в cucumber (см.: github.com/aslakhellesoy/cucumber-rails после установки что-то вроде ruby script / сгенерируйте cucumber —capybara). Что вы имеете в виду, что вы можете нажать на ссылку удаления, но не на вторую ссылку? Я не понимаю.

3. Я имею в виду, что у меня есть список сотрудников, и у меня есть ссылка на удаление для каждого сотрудника в списке. Я хотел бы, чтобы cucumber нажимал на вторую ссылку удаления, если это возможно.

4. Извините, я все еще не понимаю! Какая из них является «второй ссылкой для удаления»? Как объяснялось ранее: REST (принцип, реализованный в Rails) определяет метод УДАЛЕНИЯ (HTTP) для действий по удалению. Обычная ссылка приведет вас к получению. Rails достаточно умен, чтобы использовать javascript для удаления за вас! Это означает, что для тестирования требуется поддержка JAVASCRIPT! Webrat / Cucumber == НЕТ поддержки JS. Это означает, что вам нужно переключиться на другой драйвер brower для ваших тестов. Пожалуйста, установите cucumber-rails, как упоминалось ранее, используйте capybara в качестве драйвера браузера и повторите попытку.

5. У меня действительно установлены cucumber-rails, и я использую capybara. Я могу написать тест, в котором в списке есть один элемент с одной ссылкой «удалить» на странице, и это работает. Однако, если у меня есть два или более элемента в моем списке, тогда у меня будут две или более ссылки с одинаковым именем, называемые ‘delete’.