web-dev-qa-db-fra.com

Utiliser Selenium en Python pour cliquer/sélectionner un bouton radio

J'essaie de choisir parmi une liste de 3 boutons, mais je ne trouve pas le moyen de les sélectionner. Vous trouverez ci-dessous le code HTML avec lequel je travaille.

<input name="pollQuestion" type="radio" value="SRF"> 
    <font face="arial,sans-serif" size="-1">ChoiceOne</font><br />
<input name="pollQuestion" type="radio" value="COM">
    <font face="arial,sans-serif" size="-1">ChoiceTwo</font><br />
<input name="pollQuestion" type="radio" value="MOT">
    <font face="arial,sans-serif" size="-1">ChoiceThree</font>

Je peux le trouver en utilisant le code suivant:

for i in browser.find_elements_by_xpath("//*[@type='radio']"):
     print i.get_attribute("value")

Cette sortie: SRF, COM, MOT

Mais je voudrais choisir ChoiceOne. (Pour cliquer dessus) Comment puis-je faire cela?

9
Das Bruno

Utilisez le sélecteur CSS ou XPath pour sélectionner directement par l'attribut value, puis cliquez dessus.

browser.find_elements_by_css("input[type='radio'][value='SRF']").click
# browser.find_element_by_xpath(".//input[@type='radio' and @value='SRF']").click

Corrections (mais OP devrait apprendre à chercher dans la documentation)

  • Dans la liaison Python, find_elements_by_css n'existe pas, il s'appelle find_elements_by_css_selector. On devrait pouvoir examiner le message d’exception et revenir à la documentation ici et comprendre pourquoi.
  • Remarquez la différence entre find_element_by_css_selector et find_elements_by_css_selector? Le premier trouve le premier élément correspondant, le second une liste, vous devez donc utiliser [0] pour indexer. Ici est la documentation de l'API. La raison pour laquelle j'utilise ce dernier, c'est parce que j'ai copié votre code, ce que je ne devrais pas.
31
Yi Zeng

find_elements_by_css_selector a travaillé pour moi,

browser.find_elements_by_css_selector("input[type='radio'][value='SRF']")[0].click()
1
praba230890

Enter image description here

Selenium Webdriver Cliquez sur le bouton radio 

Quand j'ai utilisé xpath: 

driver.find_element_by_xpath("//input[@id='id_gender2']").click()

bouton radio non sélectionné

Mais j'ai utilisé css_selector:

driver.find_element_by_css_selector("input#id_gender1").click() 

bouton radio sélectionné

0
R P
browser.find_elements_by_xpath(".//input[@type='radio' and @value='SRF']")[0].click

Cela a fini par être la solution. Je recevais des erreurs sans le [0], qu'une liste ne possède pas d'attribut click () (même s'il n'y avait qu'une seule correspondance). Merci pour l'aide user1177636!

0
Das Bruno