Selenium send_keys在输入类型为"number"时不工作
我正在使用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 个回答
在我的情况下,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
你可以试试用JavaScript来解决这个问题。下面的代码是用Java写的,但在Python中也可以用类似的方法来实现:
((IJavaScriptExecutor)webdriver)
.ExecuteScript("document.getElementById('field_id').value='12';");
我也遇到过同样的问题,使用JavaScript解决了它。
今天早上我遇到了这个问题。升级了Selenium之后,现在一切正常了。
所以如果你在看这个,试着运行一下
pip install -U selenium
然后再试一次。我把Selenium从2.41.0版本升级到了2.42.1,现在和Firefox 30.0配合得很好。
我在使用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时的操作
因为你正在使用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无法找到类型为数字的字段