Selenium send_keys在输入类型为"number"时不工作

10 投票
7 回答
25564 浏览
提问于 2025-04-18 05:01

我正在使用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() 也是一样。

Selenium版本:2.41.0
Firefox版本:29.0

7 个回答

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

0

你可以试试用JavaScript来解决这个问题。下面的代码是用Java写的,但在Python中也可以用类似的方法来实现:

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

我也遇到过同样的问题,使用JavaScript解决了它。

2

今天早上我遇到了这个问题。升级了Selenium之后,现在一切正常了。

所以如果你在看这个,试着运行一下

pip install -U selenium

然后再试一次。我把Selenium从2.41.0版本升级到了2.42.1,现在和Firefox 30.0配合得很好。

5

我在使用Fedora这个系统(它不提供像Firefox这样的旧版本软件包),所以“降级Firefox”对我来说并没有什么帮助。

幸运的是,一个非常相似问题的回答给出了一个更好的解决办法——就是把Firefox的一个设置“dom.forms.number”改成关闭对input type="number"的特殊处理。在Python中可以这样做:

profile = webdriver.FirefoxProfile()                                    
profile.set_preference("dom.forms.number", False)                       
browsers = webdriver.Firefox(profile)

这是在使用Firefox 29和Selenium 2.41.0时的操作

6

因为你正在使用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无法找到类型为数字的字段

撰写回答