我正在用硒编写测试。在那些测试中,我需要在表单的字段中输入一个数字。
这是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
答案 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
答案 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`
答案 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)