Использование Selenium в Python для нажатия / выбора переключателя

Я пытаюсь выбрать из списка 3 кнопок, но не могу найти способ их выбрать. Ниже приведен HTML, с которым я работаю.

<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>

Я могу найти его, используя следующий код:

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

это выводит: SRF, COM, MOT

но я хотел бы выбрать ChoiceOne. (Чтобы щелкнуть по нему) как это сделать?

5 ответов


используйте селектор CSS или XPath для выбора по value атрибут напрямую, затем щелкните его.

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

исправления (но OP должен научиться искать в документации)

  • в привязке Python,find_elements_by_css не существует, это называется find_elements_by_css_selector. Нужно иметь возможность посмотреть сообщение об исключении и вернуться к документации здесь и выяснить, почему.
  • обратите внимание на разницу между find_element_by_css_selector и find_elements_by_css_selector? Первая находка первый соответствующий элемент, второй находит список, поэтому вам нужно использовать [0] для индексирования. здесь является документацией API. Причина, по которой я использую последнее, заключается в том, что я скопировал ваш код, чего я не должен.

в цикле for вы можете использовать метод click.

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

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

это закончилось исправлением. Я получал ошибки без [0] там, что список не имеет атрибута click () (хотя было только 1 совпадение). Спасибо за помощь user1177636!


find_elements_by_css_selector работал для меня,

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

Enter image description here

Selenium WebDriver переключатель нажмите

когда я использовал xpath:

driver.find_element_by_xpath("//input[@id='id_gender2']").click()
радио Не выбран

но я использовал css_selector :

driver.find_element_by_css_selector("input#id_gender1").click() 
радио выбранный