2017-06-29 3 views
0

Je suis en train de sélectionner le bouton radio pour le free-lance le code est le suivant (quand nous inspectons l'élément sur le navigateur)quelles sont les principales façons de sélectionner un bouton radio capybara

<label for="registration_payer_type_business"><input checked="checked" id="registration_payer_type_business" name="registration[payer_type]" type="radio" value="business"> 
      Company 
      </label> 

<label for="registration_payer_type_freelancer"><input id="registration_payer_type_freelancer" name="registration[payer_type]" type="radio" value="freelancer"> 
      Freelancer 
      </label> 

J'ai essayé

page.choose("registration_payer_type_freelancer") 

Cela ne donne pas d'erreur, mais quand et enregistrer et page ouverte dans capybara toujours la boîte radio n'est pas sélectionnée contre Freelancer. J'apprécierais si les gens peuvent donner un exemple en utilisant xpath et choisir.

Répondre

2

Le véritable problème que vous avez probablement est que save_and_open_page enregistre le code HTML avec les valeurs d'attribut en cours PAS les valeurs de propriété en cours. Cela signifie que le fait que vous avez sélectionné un bouton radio (qui modifie la valeur de la propriété vérifiée, et non la valeur de l'attribut, ne sera pas nécessairement affiché). Il vaut mieux utiliser save_and_open_screenshot si vous voulez voir l'état actuel d'une page. Cela étant dit ci-dessous est des moyens que vous pouvez sélectionner les boutons radio.

Pour sélectionner un bouton radio spécifique avec Capybara vous pouvez utiliser l'identifiant, le nom, le texte de l'étiquette et la valeur trop si nécessaire pour rendre unique (avec un nom par exemple)

choose('registration_payer_type_freelancer') # id 
choose('registration[payer_type]', option: 'freelancer') # name and value to make unique 
choose('Freelancer') # label text 
choose(option: 'freelancer') # just value if the only radio button with that value 

Dans tous les cas, si l'élément d'entrée de bouton radio réelle est non visible (pour le style, etc.) sur la page et que vous voulez à la place cliquez sur l'étiquette visible, vous pouvez passer allow_label_click: true

choose('registration_payer_type_freelancer', allow_label_click: true) # find by id and select by clicking the label if input is non-visible 

d'autres options que vous pouvez utiliser est de trouver juste en CSS (l'argument: css peut être ignoré si votre type de sélection par défaut est la valeur par défaut: Css)

find(:css, '#registration_payer_type_freelancer').click 

Vous pouvez également utiliser des requêtes XPath pour localiser l'élément, mais ils ne sont vraiment pas nécessaire 98% du temps (plus de gens correctement comprendre CSS et avec détermination de la portée de finders, il peut généralement être utilisé pour obtenir n'importe quel élément), et avoir des problèmes à connaître - https://github.com/teamcapybara/capybara/blob/master/README.md#beware-the-xpath--trap

find(:xpath, './/input[@value="freelancer"]').click