2014-04-22 11 views
11

Sto cercando di ottenere l'output di una pagina Web console.log da Firefox tramite i collegamenti API Python Selenium. Sulla base della code for Chrome, e alcuni advice from the documentation, ho provato la seguente:Ottenere l'output console.log da Firefox con Selenium

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
d = DesiredCapabilities.FIREFOX 
d['loggingPrefs'] = { 'browser':'ALL' } 
fp = webdriver.FirefoxProfile() 
fp.set_preference('webdriver.log.file', '/tmp/firefox_console') 
driver = webdriver.Firefox(capabilities=d,firefox_profile=fp) 
driver.set_window_size(1280,1024) 
driver.get('http://foo.com') 
try: 
    WebDriverWait(driver,10).until(lambda driver: driver.execute_script("return document.readyState") == "complete") 
    for entry in driver.get_log('browser'): 
     print entry 
finally: 
    driver.quit() 

Ma, anche per una semplice pagina di esempio che chiama console.log("foo"), non vedo "foo" sia nelle voci di registro restituito tramite l'API o in il file /tmp/firefox_console. Sto facendo qualcosa di sbagliato? O si tratta di una limitazione del selenio?

+1

Questa è per le persone che vengono ora per verificare le risposte. driver.get_log ('browser') non funziona per Firefox a partire da questa data. C'è un problema aperto https://github.com/SeleniumHQ/selenium/issues/1161 – Rajesh

risposta

6

Il vostro codice è corretto quando si tratta di funzione get_log, è sufficiente aggiungere un comunicato print alla fine in questo modo:

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

# enable browser logging 
d = DesiredCapabilities.FIREFOX 
d['loggingPrefs'] = {'browser': 'ALL'} 
driver = webdriver.Firefox(capabilities=d) 
# load some site 
driver.get('http://foo.com') 
# print messages 
for entry in driver.get_log('browser'): 
    print entry 

print 

driver.quit() 

Infatti:

print len(driver.get_log('browser')) 

rendimenti 53 nel mio esempio con questo come una voce di esempio nell'elenco:

{u'timestamp': 1407591650751, u'message': u"Expected ':' but found '}'. Declaration dropped.", u'level': u'WARNING'} 

Sembra un brutto problema. Per quanto riguarda il motivo per cui non vi è alcun output nel file /tmp/firefox_console, non ho idea, il logger sembra lanciare alcune informazioni di debug di webdriver ma nessun output console.log.

MODIFICA: Apparentemente il codice sopra riportato non restituisce i dati da console.log. Non è un bug di selenio, per quanto posso dire, ma un problema con Firefox. Sono riuscito a risolverlo installando il Firebug insieme al plugin ConsoleExport per Firebug, quindi puntarlo su un server di registrazione. Vedi anche this SO answer per i dettagli su come abilitare Firebug a livello di codice da Selenium.

Vai a questa sostanza per maggiori dettagli: https://gist.github.com/CGenie/fc63536a8467ae6ef945

+0

Non stavo dicendo che non ottengo alcun output di log dal driver, solo che non ottengo l'output 'console.log' . Vedete l'output di 'console.log' nelle voci del registro dei driver? – msridhar

+1

Sembra che le eccezioni non sincronizzate e gli errori di sintassi siano registrati come SEVERE. Questo sembra promettente per la cattura di errori JS con test automatici. –

Problemi correlati