2017-07-13 1 views
0

J'ai un peu un problème, im essayant de sélectionner un bouton radio dans un ensemble de données-tables de données. Im capable de filtrer la ligne de données sur une seule table à un seul il est le seul qui apparaît sur la page ... mais j'ai essayé page.choose, page.find(<xpath>), page.find(<css>), j'ai aussi essayé de faire tout le précédent dans une certaine sélection de css et je n'arrive pas à comprendre ce qu'il me reste à essayer.Capybara incapable de sélectionner le bouton radio dans les tableaux de données

Le code HTML est pertinent ici, malheureusement comme cela est un élément de travail que je ne peux pas poster tout. Cependant, je suis capable de cliquer sur l'étiquette si je spécifie l'ID via:

find(:xpath, "//label[@for='approve_row_5']").click Cependant, cela ne semble pas réellement «sélectionner» le bouton radio. J'ai aussi essayé de faire une attente après je filtre la table de données Les résultats

de toute façon, voici le code HTML pour les 2 boutons radio après la ligne a été filtrée (les boutons radio résident dans une colonne)

<td class=" align-middle"> 
     <div class="radio"> 
      <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_approve" value="person_approve" data-ui-verify-key="test_approve" data-ui-verify-title="2017-07-13 14:59:46 -0400"> 
      <label for="approve_deny_row_5_approve"> 
      <span>Approve</span> 
      </label> 
     </div> 

     <div class="radio"> 
      <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_deny" value="person_deny" data-ui-verify-key="test_deny" data-ui-verify-title="2017-07-13 14:59:46 -0400" data-ui-verify-url="/irrelevant/stuff"> 
      <label for="approve_deny_row_5_deny"> 
      <span>Deny</span> 
      </label> 
     </div> 
     </td> 

Je pensais juste de trouver l'étendue par le texte et en cliquant dessus, ce qui passe .... mais ne sélectionne pas réellement le bouton radio. Aussi j'essayé la recherche par le sélecteur de valeur spécifique et par une find('input[value="test_approve"]').click mais pas eu de chance non plus

Toutes les idées?

+0

Il n'y a pas 'élément input' avec attribut' de value' qui est égale à ' "test_approve"', mais 'value = "person_approve"' au moins prévu morceau de 'html'. Avez-vous essayé 'find ('input [value =" person_approve "]'). Click' ou' find ('input [données-ui-verify-key = "test_approve"]'). Click'? – Andersson

+0

En supposant que les 'éléments input' sont effectivement visibles sur la page, puis' choisir (« approve_deny_row_5_approve ») 'et' choisir (« approve_deny_row_5_deny ») 'doit choisir l'un ou l'autre bouton radio (Comme cela devrait' choisir (« approuver ») ' et 'choose (" Deny ") tant que vous êtes dans la rangée) - quelle erreur produisent-ils exactement? –

+0

@Andersson qui était juste un mis-type, j'ai changé certaines valeurs et j'ai oublié de changer cela. @ThomasWalpole Malheureusement, choisir ('Approuver') ne fonctionne pas et aura pour résultat 'Capybara :: ElementNotFound: Impossible de trouver le bouton radio" Approuver "' va de même pour l'utilisation de l'ID. C'est peut-être un problème de portée, car j'utilise un filtre ailleurs dans la page à l'avance (qui est un formulaire texte). – msmith1114

Répondre

1

En supposant que les entrées radio réelles sont visibles sur la page (et non cachée pour permettre le style) les méthodes qui doivent travailler à cette fin sont

choose("Approve") 
choose("Deny") 

ou

choose("approve_deny_row_5_approve") 
choose("approve_deny_row_5_deny") 

Si ceux vous dire ils ne peuvent pas trouver les éléments alors il est très probable que les éléments d'entrée sont cachés (pour des raisons de style) et vous devriez être en mesure d'utiliser le

choose('Approve', allow_label_click: true) 

qui cliquera sur l'élément d'étiquette associé à l'entrée plutôt qu'à l'élément d'entrée. Cela devrait produire le même résultat (en réglant le bouton radio) à moins que le comportement que vous recherchez soit basé sur JS recherchant un clic sur un élément très spécifique (plutôt que sur l'événement de changement sur l'entrée). Si tel est le cas, vous devez déterminer exactement l'élément sur lequel le JS recherche des clics, ou fixer le JS de manière plus intuitive.

+0

Donc, c'est intéressant, je peux cliquer sur l'étiquette et obtenir le modal pour apparaître, mais cela prend 2 clics, cela ne se produit que si je viens de taper le filtre (une zone de texte). Donc je devine puisque l'accent est mis sur la zone de texte qui est à l'origine du problème. Par exemple, si je tape dans la boîte de texte, cliquez sur hors de celui-ci n'importe où ailleurs un simple clic sur l'étiquette permettra de sélectionner le bouton radio de manière appropriée. Dans le code que je peux faire: 'choisir ('approuver', allow_label_click: true)' 'choisir ('Approuver', allow_label_click: true)' (Mettez deux fois) et cela fonctionne ... il y a sûrement est un moyen moins hacky cependant. – msmith1114

+1

@ msmith1114 Fonctionne-t-il avec un seul clic sur l'étiquette lorsqu'il est fait manuellement? si l'utilisateur fait EXACTEMENT les actions que vous dites à Capybara de faire (remplir un champ spécifique, puis un clic sur l'étiquette, etc.) le modal apparaît-il? –

+0

Non, il ne le fait pas (désolé c'est ce que j'essayais d'expliquer). Si je remplis la zone de texte, puis cliquez sur l'étiquette, cela ne fonctionnera pas, ce n'est pas jusqu'à ce que je clique à nouveau que cela fonctionne. Si je clique n'importe où ailleurs sur la page après avoir rempli la zone de texte, faire un simple clic sur l'étiquette fonctionne. (Se référant à faire cela manuellement et PAS avec Capybara). Donc, dans Capybara, j'étais capable de le faire fonctionner en faisant juste le 'choose ('Approuver', allow_label_click: true)' deux fois. Bien que ce soit évidemment une sorte de hacky et désordonné et je disais qu'il devait y avoir une autre façon qui soit plus propre. – msmith1114