8

Ho il seguente codice JavaScript che restituisce null quando scorreva attraverso Selenium JavascriptExecutor. Tuttavia, lo stesso codice eseguito nella console di sviluppo di Firefox ha restituito un valore.Selenium Javascript executor restituisce null

function tmp(){ 
    var attrb = jQuery(jQuery("[name='q']")[0]).attr('type'); 
    if(typeof attrb !== 'undefined' && attrb !== false){ 
     return attrb; 
    } else { 
     return ''; 
    } 
} 

tmp(); 

Il sotto è il mio codice WebDriver con il JS identico al precedente:

JavascriptExecutor jsExec = (JavascriptExecutor)driver; 
Object inpType = 
     jsExec.executeScript("function tmp(){...}tmp();"); 
System.out.println("Type: " + inpType); 

uscite Sopra null invece di stringa "testo". Qualche idea?

+0

Ho aggiunto il mio codice di selenio sopra, per favore dare un'occhiata. Grazie. – Jsm

risposta

1

Il problema è che si eseguono due istruzioni in executeScript(). La definizione della funzione di tmp() e la chiamata alla funzione di tmp().

Non conosco i dettagli, ma la definizione della funzione sembra restituire null.

Poiché executeScript restituisce il primo valore che può essere restituito, restituisce null. Se non definisci la funzione e scrivi il codice in linea, funzionerà.

JavascriptExecutor jsExec = (JavascriptExecutor) driver; 
Object inpType = jsExec 
    .executeScript("var attrb = jQuery(jQuery(\"[name='q']\")[0]).attr('type');"+ 
      "if(typeof attrb !== 'undefined' && attrb !== false)" + 
      "{return attrb;}" + 
      "else{return '';}"); 
System.out.println("-------------- Type: " + inpType); 

Questo dovrebbe stampare il valore previsto.

Modifica: Inoltre, il codice inviato non sfugge allo "" intorno a [name='q']. Questo termina la stringa e causa errori di sintassi.

+0

Grazie per la risposta. Ho tutto in linea in precedenza, ma ha causato a firefox di restituire un errore che dice "return not in a function" che è il motivo per cui ho spostato questo snippet in una funzione tmp() e chiamato. Venendo alle virgolette, quanto sopra è un errore di battitura. Lo script è generato dinamicamente nel codice in cui sono sfuggito "", per semplicità ho copiato il javascript sopra nella chiamata alla funzione: – Jsm

+0

@Jsm 'executeScript()' può avere un'istruzione return e non genera un errore. basta usare la funzione inline per 'executeScript()', e racchiusa in una funzione per l'inserimento diretto in Firefox? –