2017-08-16 2 views
0

J'essaie de trouver une balise select en utilisant capybara dans un test système. J'ai un couple de balises de sélection dans une page et j'en veux en mode lecture seule lorsque l'utilisateur est en train d'éditer. Je suis tombé sur un autre post mais je ne trouve rien d'utile, même si j'ai trouvé ces sélecteurs comme find_field, find_button et find_link. J'essaie de faire ceci:Rechercher une balise de sélection avec capybara

assert_equal vrai, find_select ('id'). Readonly ?.

Cela ne fonctionne pas. Y a-t-il un moyen d'accomplir cela?

+0

Quelle est l'erreur exacte que vous obtenez? –

+0

méthode non définie 'find_select' –

Répondre

0

Capybara n'a pas une méthode find_select, mais il a un type de sélecteur :select-https://github.com/teamcapybara/capybara/blob/2.15.1/lib/capybara/selector.rb#L358

Le premier paramètre à find est le type de sélection (par défaut: Css si omis) afin que vous puissiez faire ce que vous veulent avec

assert_equal true, find(:select, 'id').readonly? 

Depuis qui utilise une affirmation non fourni capybara il a l'inconvénient de ne pas utiliser un comportement d'attente/réessayant. Si le statut de l'élément change dynamiquement, cela peut entraîner des problèmes de synchronisation et des tests de détection. Si cela se passe sur votre page, vous ferez mieux d'utiliser le type de sélecteur :field qui fournit un filtre readonly - https://github.com/teamcapybara/capybara/blob/2.15.1/lib/capybara/selector.rb#L88 - et qui peut également correspondre à certains éléments (Le sélecteur :select ne possède pas de filtre en lecture seule car techniquement l'élément select ne support en lecture seule - voir ci-dessous).

assert_selector :field, 'id', type: 'select', readonly: true 

en supposant que vous avez chargé le capybara a fourni des affirmations MiniTest qui pourraient également être écrits comme

assert_field 'id', type: 'select', readonly: true 

ou avec le ': sélectionnez' affirmation de sélection et un bloc filtrant

assert_select('i') { |el| el.readonly? } 

Notez cependant, en HTML, la méthode select ne supporte pas réellement un attribut readonly, donc si ce que vous voulez vraiment est de vous assurer que l'élément select est désactivé alors vous feriez

assert_field 'id', type: 'select', disabled: true 
assert_select 'id', disabled: true 

etc.