Использование 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()
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()
радио выбранный