#ruby-on-rails #ruby #rspec #capybara
#ruby-on-rails #ruby #rspec #capybara
Вопрос:
У меня есть несколько полей электронной почты в форме. Ни у одного из них намеренно нет идентификатора. Как я могу отличить каждый элемент в тесте, если у них нет идентификатора? Я покажу код для наглядности.
ТЕСТ
it "sends an invitation to multiple users" do
click_on "Invite"
click_link "Invite Another Team Member"
fill_in "", with: "user@example.com"
fill_in "", with: "user2@example.com"
expect { click_button "Invite" }
.to change(ActionMailer::Base.deliveries, :count).by(1)
.and change(Invitation, :count).by(2)
expect(current_path).to eq(account_users_path)
expect(page).to have_content("user@example.com")
expect(page).to have_content("user2@example.com")
end
Это фактически создает один объект, нижнее поле. Как я могу придать текстовым полям индивидуальность?
ФОРМА
<%= form_tag account_invitations_url do %>
<label class="email-label">
<%= email_field_tag "emails[]", "", placeholder: "Email Address", data: { invitation_modal_email: "" }, id: "" %>
</label>
<%= link_to '✚ Invite Another Team Member', "#email", data: { invitation_modal_add: "" } %>
<div class="form-actions invitation">
<span class="button-text"><%= link_to 'Cancel', account_users_path %></span>
<%= submit_tag "Invite", class: "button button--invitation" %>
</div>
<% end %>
## Браузер HTML
Ответ №1:
Я думаю, вы можете использовать метод Capybara all для поиска всех элементов с одинаковым именем:
emails = ["user@example.com", "user2@example.com"]
all('input[name="emails[]"]').each_with_index do |field, i|
field.set(emails[i])
end
Или:
all('input[name="emails[]"]')[0].set("user@example.com")
all('input[name="emails[]"]')[1].set("user2@example.com")
Комментарии:
1. Спасибо за помощь, но не могли бы вы подробнее остановиться на втором?
2. Также я получаю эту ошибку сейчас
Nokogiri::CSS::SyntaxError: unexpected ']' after '['
3. @Cameron Bass, вам, вероятно, нужно экранировать
[]
с помощью одинарной или двойной обратной косой черты:'emails[]'
или'emails\[\]'
4. Тьфу,.. Это выдает мне
Nokogiri::XML::XPath::SyntaxError: Invalid expression: //emails[]
ошибку5. Чтобы исправить ошибку, пожалуйста, попробуйте:
all('emails[]')
илиall('input[name=emails[]]')
(обновил ответ). Не совсем понятно, что вы имеете в виду подelaborate on that second one
, извините. Я думаю, что второй пример полезен, когда нужно заполнить 2 из многих параметров или он может быть более читаемым.