Ключи отправки Selenium не работают, если тип ввода= " номер"
Я пишу тесты с использованием Selenium. В этих тестах мне нужно ввести номер в поле в форме.
вот html:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form>
<input type="number" id="field_id">
</form>
</body>
</html>
и код:
browser = webdriver.Firefox()
browser.get('file:///home/my_username/test.html')
field = browser.find_element_by_id('field_id')
field.send_keys('12') # NOTHING HAPPEN!
кстати, если я изменю тип поля на "текст", например, нет никаких проблем. Кроме того, field.send_keys(Keys.UP)
отлично работает (но не работает, когда я использую bootstrap) и field.clear()
работа все время, а также field.click()
.
версия Селена: 2.41.0 Версия Firefox : 29.0
6 ответов
потому что вы используете Firefox 29. Пожалуйста, перейдите на Firefox 28, который поддерживает Selenium 2.41.0, см. изменения. В противном случае вам нужно дождаться новых обновлений Selenium.
вот что я тестировал при работе с Firefox 28:
from selenium import webdriver
DEMO_PAGE = '''
data:text/html,
<form><input type="number" id="field_id"></form>
'''
browser = webdriver.Firefox()
browser.get(DEMO_PAGE)
input_number = browser.find_element_by_id('field_id')
input_number.send_keys('12')
input_number_value = input_number.get_attribute('value')
print "input_number_value = " + input_number_value
Читайте также: Selenium не может найти поля с номером типа
Я на Fedora (который не предоставляет старые версии пакетов, таких как Firefox), поэтому "понижение Firefox"-это немного не ответ.
к счастью, ответ на очень похожий вопрос намеки на лучшее решение-установка " dom.формы.номер " Firefox предпочтения отключить специальный режим input type="number"
. В Python:
profile = webdriver.FirefoxProfile()
profile.set_preference("dom.forms.number", False)
browsers = webdriver.Firefox(profile)
работа с Firefox 29 и Selenium 2.41.0
я столкнулся с этой проблемой сегодня утром. После обновления Selenium он теперь работает правильно.
Итак, если Вы читаете это, запустите
pip install -U selenium
и снова попробовать. Я перешел с Selenium версии 2.41.0 на 2.42.1, и теперь он работает правильно с Firefox 30.0.
вероятно, вы можете использовать Javascript для решения этой проблемы. Следующий код находится в Java, но это, вероятно, можно сделать аналогично в Python:
((IJavaScriptExecutor)webdriver)
.ExecuteScript("document.getElementById('field_id').value='12';");
У меня была такая же проблема, и использование Javascript решило ее.
в моем случае selenium Send_keys отлично работает таким образом.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get('http://www.yahoo.com')
assert 'Yahoo' in browser.title
elem = browser.find_element_by_name('p') # Find the search box
elem.send_keys('seleniumhq' + Keys.RETURN)
browser.quit()enter code here`
Я решил эту проблему таким образом:
locator = <element xpath>
field = browser.find_element_by_xpath(to_unicode(**locator**,"utf-8"))
if(field != None):
field.send_keys(Keys.CONTROL + 'a')
field.send_keys(value)