如果输入类型="数字" selenium send_keys不起作用

时间:2014-05-01 17:22:55

标签: python firefox selenium selenium-webdriver

我正在用硒编写测试。在那些测试中,我需要在表单的字段中输入一个数字。

这是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!

顺便说一句,如果我将字段的类型更改为“text”,例如根本没有问题。此外,field.send_keys(Keys.UP)工作得很好(但在我使用引导程序时不起作用)和field.clear()一直在工作,以及field.click()

Selenium版本:2.41.0 Firefox版本:29.0

6 个答案:

答案 0 :(得分:5)

因为您使用的是Firefox 29.请降级到Firefox 28,这是Selenium 2.41.0支持的,请参阅CHANGES文件。否则,您需要等待新的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 can't find fields with type number

答案 1 :(得分:5)

我在使用Fedora(它不提供像Firefox这样的旧版本的软件包),所以&#34;降级Firefox&#34;有点不回答。

幸运的是,an answer to a very similar question暗示了一个更好的解决方案 - 设置&#34; dom.forms.number&#34; 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

答案 2 :(得分:2)

今天早上我遇到了这个问题。升级Selenium后,它现在可以正常工作。

因此,如果您正在阅读此内容,请运行

pip install -U selenium

然后再试一次。我从Selenium版本2.41.0升级到2.42.1,它现在可以在Firefox 30.0上正常运行。

答案 3 :(得分:0)

您可以使用Javascript来解决此问题。以下代码在Java中,但它可以在Python中类似地完成:

((IJavaScriptExecutor)webdriver)
     .ExecuteScript("document.getElementById('field_id').value='12';");

我有同样的问题并使用Javascript解决了它。

答案 4 :(得分:0)

在我的情况下,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`

是网络https://pypi.python.org/pypi/selenium

答案 5 :(得分:0)

我用这种方式解决了这个问题:

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)