2014-05-01 8 views
8

Ich schreibe Tests mit Selen. In diesen Tests muss ich eine Zahl in ein Feld in einem Formular eingeben. HierSelen send_keys funktioniert nicht, wenn Eingangstyp = "Nummer"

ist die html:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 

<form> 
    <input type="number" id="field_id"> 
</form> 


</body> 
</html> 

Und der Code:

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! 

BTW, wenn ich die Art des Feldes auf "Text" zum Beispiel dort ändern, ist kein Problem. Darüber hinaus funktioniert field.send_keys(Keys.UP) großartig (aber funktioniert nicht, wenn ich Bootstrap verwende) und field.clear() arbeiten die ganze Zeit, sowie field.click().

Selen Version: 2.41.0 Firefox-Version: 29,0

+0

Was ist, wenn Sie 'in einer Schleife send_keys' rufen:' für x in '12': Feld .send_keys (x) '? – alecxe

+0

Was passiert, wenn Sie zuerst auf das Feld klicken?Können Sie auch manuell Werte in das Feld eingeben? –

+0

@alecxe Nichts ... – Nagasaki45

Antwort

5

Weil Sie Firefox 29 verwenden Herabstufung Bitte Firefox 28, das ist die eine Selen 2.41.0 zu unterstützt, finden Sie CHANGES Datei. Ansonsten müssen Sie auf neue Selenium-Updates warten. Hier

ist das, was ich getestet habe die Arbeit mit 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 

Siehe auch: Selenium can't find fields with type number

+2

Funktioniert wie ein Charme. Vielen Dank! – Nagasaki45

+0

Mit mehreren Versionen von Firefox installiert, wie würde ich Selen sagen, ein bestimmtes zu verwenden? – Eldamir

+0

Gibt es einen Selenium-Fehlerbericht? Können Sie einen Link bereitstellen? – cjerdonek

4

Ich bin auf Fedora (die keine alten Versionen von Paketen wie Firefox bereitstellt), so " Downgrade Firefox "ist ein bisschen eine Nicht-Antwort.

Zum Glück, an answer to a very similar question Hinweise auf eine bessere Lösung - Einstellung der "dom.forms.number" Firefox Präferenz zu deaktivieren Sonderbehandlung von input type="number". In Python:

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

Arbeiten mit Firefox 29 und Selen 2.41.0

2

lief ich in dieses Problem heute Morgen. Nach dem Upgrade von Selenium funktioniert es nun ordnungsgemäß.

Also, wenn Sie dies lesen, laufen

pip install -U selenium 

und versuchen Sie es erneut. Ich bin von Selenium Version 2.41.0 zu 2.42.1 gegangen und es funktioniert jetzt richtig mit Firefox 30.0.

0

Sie können wahrscheinlich Javascript verwenden, um dieses Problem anzugehen. Der folgende Code ist in Java, aber es kann wahrscheinlich in ähnlicher Weise in Python getan werden:

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

Ich hatte das gleiche Problem und mit Javascript gelöst.

0

In meinem Fall funktioniert Selen Send_keys auf diese Weise gut.

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` 

es ist die Web-https://pypi.python.org/pypi/selenium

0

ich dieses Problem auf diese Weise gelöst:

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) 
Verwandte Themen