Alors voici mon test.Rails Concombre Capybara id/sélection de classe
When(/^the admin user broadcasts "([^"]*)" to the notification feed$/) do |userBroadcast|
visit('/broadcasts/new.html')
fill_in('.nifty_form', with: userBroadcast)
click_button('Broadcast')
end
J'ai ajouté dans mon new.html.erb une classe appelée « nifty-forme », comme vous pouvez le voir ci-dessous.
<h1>New broadcast</h1>
<%= form_for(@broadcast) do |f| %>
<% if @broadcast.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@broadcast.errors.count, "error") %> prohibited this broadcast from being saved:</h2>
<ul>
<% @broadcast.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= hidden_field_tag 'page', @current_page %>
<div id="broadcast-area" class="main-input-area">
<p>
<%= f.text_area :content, cols: "100%", rows: "10", class: 'nifty-form',
title: "Broadcast text goes here", autofocus: 'autofocus'%>
</p>
<div id="url-part">
<%= link_to("Shortens URL",
id: "split-arrow",
title: "Press this to shorten the URL") %>
<%= text_field_tag :shorten_url, nil,
title: "Enter URL that you wish to shorten",
size: "50%" %>
</div>
<br/>
<div id="">
<%= f.submit 'Broadcast', confirm: 'Do you really want to broadcast?' %> |
<%= link_to 'Back', broadcasts_path(page: @current_page) %>
</div>
</div>
Mais pour une raison quelconque, je reçois le résultat:
Unable to find field "nifty_form" (Capybara::ElementNotFound)
J'ai vu la source de la page rendu et il est le suivant:
<textarea cols="100%" rows="1o" class="nifty_form" title="Broadcast text goes here" autofocus="autofocus" name="broadcast[content]" id="broadcast_content" style="z-index: auto; position: relative; line-height: normal; font-size: 10.6667px; transition: none; background: transparent !important;" data-gramm="true" data-txt_gramm_id="b763ea7b-2eef-d3c8-b750-a085d2c9ce80" data-gramm_id="b763ea7b-2eef-d3c8-b750-a085d2c9ce80" spellcheck="false" data-gramm_editor="true"></textarea>
donc voir ce qui a un ID dans la page rendue J'ai décidé d'écrire un test avec cet ID comme suit:
When(/^the admin user broadcasts "([^"]*)" to the notification feed$/) do |userBroadcast|
visit('/broadcasts/new.html')
fill_in('#broadcast_content', with: userBroadcast)
end
Mais encore une fois, je suis resté avec le même message d'erreur de
Unable to find field "broadcast_content" (Capybara::ElementNotFound)
Est-il possible d'imprimer toutes les années de la Div classe que Capybara peut voir? Comment puis-je déboguer ce problème? Ai-je raison de supposer que Cappybara suit le lien après avoir cliqué sur un bouton? et la session est maintenue en vie?
J'ai essayé tous les exemples ci-dessus et je reçois toujours un élément non trouvé, je l'ai collé plus de mon Fichier erb.html ci-dessus. – Definity
@Definity il semble que la zone de texte n'est pas réellement visible sur la page et est remplacé par un widget JS. Est-ce le cas? Si c'est le cas, vous devrez interagir avec les éléments du widget plutôt qu'avec la zone de texte. –