88 votes

capybara affirmer les attributs d'un élément

Je suis en utilisant RSpec2 et le Capybara pour le test d'acceptation.

Je voudrais affirmer que le lien est désactivé ou n'est pas dans le Capybara. Comment puis-je faire cela?

145voto

bowsersenior Points 7841

Une solution simple est d'accéder à l'attribut HTML que vous cherchez avec l' []:

find('#my_element')['class']
# => "highlighted clearfix some_other_css_class"

find('a#my_element')['href']
# => "http://example.com

# or in general, find any attribute, even if it does not exist
find('a#my_element')['no_such_attribute']
# => ""

91voto

idlefingers Points 15957

Comment êtes-vous désactiver le lien? C'est une classe que vous avez ajouté? Un attribut?

# Check for a link that has a "disabled" class:
page.should have_css("a.my_link.disabled")
page.should have_xpath("//a[@class='disabled']")

# Check for a link that has a "disabled" attribute:
page.should have_css("a.my_link[disabled]")
page.should have_xpath("//a[@class='disabled' and @disabled='disabled']")

# Check that the element is visible
find("a.my_link").should be_visible
find(:xpath, "//a[@class='disabled']").should be_visible

La réelle xpath sélecteurs peuvent être incorrects. Je n'ai pas utiliser xpath souvent!

4voto

Clint Points 123

C'était un peu brouillon pour trouver le bon xpath, ici est la bonne,
à l'aide de capybara 0.4.1.1

# <a href="http://stackoverflow.com/clowns?ordered_by=clumsyness" class="weep">View Clowns</a>  

page.should have_xpath("//a[@class='weep'][@href='http://stackoverflow.com/clowns?ordered_by=clumsyness']", :text => "View Clowns")

Si vous avez seulement un lien sans classe, l'utilisation

page.should have_link('View Clowns', :href => '/clowns?ordered_by=clumsyness')

Quelque chose comme ce sera malheureusement pas le travail:

page.should have_link('This will not work!', :href => '/clowns?ordered_by=clumsyness', :class => "weep")

La classe option sera ignorée.

1voto

kaikuchn Points 91
page.should have_link('It will work this way!', {:href => '/clowns?ordered_by=clumsyness', :class => "smile"})

have_link s'attend à un hachage d'options qui est vide si vous n'en fournissent pas. Vous pouvez spécifier les attributs du lien ont - assurez-vous de passer toutes les options dans l'UN de hachage.

Espérons que cette aide

PS: Pour les attributs comme des données-méthode, vous devez passer le nom de l'attribut comme une chaîne de caractères depuis le trait d'union rompt le symbole.

1voto

Ciro Santilli Points 3341

Chaque fois que possible, vous devriez essayer d'utiliser le Capybara fourni des wrappers qui permettra de travailler de façon plus systématique à travers des pilotes.

Pour le cas particulier de l' disabled, une enveloppe a été introduit dans la version 2.1: https://github.com/jnicklas/capybara/blob/fc56557a5463b9d944207f2efa401faa5b49d9ef/History.md#version-210

Si vous l'utilisez, vous obtiendrez des résultats sensées sur les deux RackTest et Lutin:

HTML:

<input type="text" id="disabled-false"            ></div>
<input type="text" id="disabled-true"     disabled></div>
<input type="text" id="disabled-js-true"          ></div>
<input type="text" id="disabled-js-false" disabled></div>
<script>
  document.getElementById('disabled-js-true').disabled = true
  document.getElementById('disabled-js-false').disabled = false
</script>

Tests:

!all(:field, 'disabled-false',    disabled: false).empty? or raise
 all(:field, 'disabled-false',    disabled: true ).empty? or raise
 all(:field, 'disabled-true',     disabled: false).empty? or raise
!all(:field, 'disabled-true',     disabled: true ).empty? or raise
 all(:field, 'disabled-js-true',  disabled: true ).empty? or raise
 all(:field, 'disabled-js-false', disabled: false).empty? or raise

Capybara.current_driver = :poltergeist
!all(:field, 'disabled-false',    disabled: false).empty? or raise
 all(:field, 'disabled-false',    disabled: true ).empty? or raise
 all(:field, 'disabled-true',     disabled: false).empty? or raise
!all(:field, 'disabled-true',     disabled: true ).empty? or raise
!all(:field, 'disabled-js-true',  disabled: true ).empty? or raise
!all(:field, 'disabled-js-false', disabled: false).empty? or raise

Notez comment à l'aide de ce lieu de sélecteurs CSS, le Javascript, des tests de travailler sans aucune modification si vous commencez à utiliser un Js capable de pilote.

Praticable fichier de test ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X