Concombre, Capybara et ElementNotFound
-
26-09-2019 - |
Question
Dans mon application rails, j'ai une page avec un lien qui exécute une fonction javascript:
<%= link_to_function("Add an address", "add_fields(this)".html_safe) %>
Dans ma fonction de concombre je:
And I press "Add an address"
Et le message que je reçois est:
Capybara::ElementNotFound: no button with value or id or text 'Add an address' found
Je suis probablement manque quelque chose, mais je ne peux pas trouver ce qu'il est ..
La solution
Vous devriez faire une, et une seule, des éléments suivants:
- Renommer votre bouton Envoyer à 'Créer'
- Changer votre test "Et je appuyez sur "Enregistrer"
-
bouton Ajouter à un identifiant et changer aussi le test, comme ceci:
vue
= F.submit 'Enregistrer',: id =>: fooTest
Et je presse "toto"
Autres conseils
Résolu par joaomilho:
Vous devriez faire une, et une seule, des éléments suivants:
Renommer votre bouton Envoyer à « Créer » Changez votre test « Et je presse « Enregistrer » » Bouton Ajouter à un identifiant, et changer aussi le test, comme ceci:
vue = F.submit 'Enregistrer',: id =>: foo
Test Et je presse « toto »
1 scénario (1 passé) 3 étapes (3 adopté) 0m2.510s
Même comportement ici, j'utilise:
Rails 3 Concombre / Capybara / Haml
Feature: Manage posts
In order to [goal]
[stakeholder]
wants [behaviour]
@wip
Scenario: Register new post # features/manage_posts.feature:6
Given I am on the new post page # features/step_definitions/web_steps.rb:19
When I fill in "Title" with "title 1" # features/step_definitions/web_steps.rb:40
And I fill in "Body" with "body 1" # features/step_definitions/web_steps.rb:40
And I uncheck "Published" # features/step_definitions/web_steps.rb:83
And I press "Create" # features/step_definitions/web_steps.rb:27
Then I should see "title 1" # features/step_definitions/web_steps.rb:108
And I should see "body 1" # features/step_definitions/web_steps.rb:108
And I should see "false" # features/step_definitions/web_steps.rb:108
Étape:
When /^(?:|I )press "([^"]*)"(?: within "([^"]*)")?$/ do |button, selector| with_scope(selector) do
click_button(button)
selenium.wait_for_page_to_load
end
end
Voir le nouveau:
%h1 New post
= render 'form'
= link_to 'Back', posts_path
Erreur:
no button with value or id or text 'Create' found (Capybara::ElementNotFound)
./features/step_definitions/web_steps.rb:29
./features/step_definitions/web_steps.rb:14:in `with_scope'
./features/step_definitions/web_steps.rb:28:in `/^(?:|I )press "([^"]*)"(?: within "([^"]*)")?$/'
features/manage_posts.feature:11:in `And I press "Create"'
_form:
= form_for @post do |f|
-if @post.errors.any?
#errorExplanation
%h2= "#{pluralize(@post.errors.count, "error")} prohibited this post from being saved:"
%ul
- @post.errors.full_messages.each do |msg|
%li= msg
.field
= f.label :title
= f.text_field :title
.field
= f.label :body
= f.text_area :body
.field
= f.label :published
= f.check_box :published
.actions
= f.submit 'Save'
Je crois que vous voulez
And I follow "Add an Address"
Sebastian. Essayez d'ajouter un identifiant à votre lien, et la référence dans votre test
était-ce pas le problème d'origine que vous créez un lien mais en essayant d'appuyer sur un bouton
Lire les capybara attentivement docs, et vous verrez les méthodes sont différentes.