2013-07-23 9 views
5

Ich verwende Selen und PhantomJS zum Testen. Ich habe Seleniums einfache Bedienung verfolgt, aber send_keys funktioniert nicht mit PhantomJS, es funktioniert mit Firefox. Warum? Ich muss stattdessen button.click() verwenden?selen PhantomJS send_keys funktioniert nicht

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import sys 

reload(sys) 
sys.setdefaultencoding('utf-8') 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.PhantomJS() 

driver.get("http://www.python.org/") 
elem = driver.find_element_by_id("q") 
elem.clear() 
elem.send_keys("python") 
elem.send_keys(Keys.RETURN) 
# button = driver.find_element_by_id('submit') 
# button.click() 
print driver.title 
print driver.page_source 
driver.close() 

Antwort

7

Ich vermute sehr, es ist nur Timing-Problem.

Seleniums click() wird auf das Laden der Seite warten, wenn es nach dem Klicken umgeleitet wird, während send_key() nicht wartet. (PhantomJS ist ohne Kopf, die schneller als Firefox ist)

Bitte versuchen Sie etwas Schlaf wie time.sleep(5) nach elem.send_keys(Keys.RETURN) hinzufügen, bevor print driver.title, und sehen, ob Sie das gewünschte Ergebnis erhalten.

In einem echten Testprojekt müssen Sie nur WebDriverWait verwenden, bis driver.title dem gewünschten Wert entspricht.

+4

Ich bin gerade auf das gleiche Problem gestoßen. Ja, es ist ein Timing-Problem, aber Keys.RETURN funktionierte nicht für mich, ich brauchte Keys.ENTER. Ich habe die Idee von https://github.com/detro/ghostdriver/issues/249 –

Verwandte Themen