2013-05-10 7 views
5

Ho una pagina Web con due menu a discesa. La selezione di un'opzione in un menu a discesa aggiornerà l'elenco di opzioni nell'altro menu a discesa tramite uno script attivato dall'evento di sfocatura. L'evento sfocatura viene attivato quando lo stato attivo si allontana dal primo menu a discesa. Tutto funziona bene quando si naviga la pagina manualmente.Le azioni tramite WebDriver non attivano l'evento sfocatura

Tuttavia, quando si eseguono gli stessi passaggi tramite WebDriver, l'evento sfocatura non viene mai attivato e il menu a discesa non viene quindi mai aggiornato, causando il fallimento dello script.

Ecco il codice HTML per la discesa seleziono prima (e che ha lo script onblur collegato ad esso:

<select id="newOrder:shipToAddressType" class="fieldRequired"  onblur="PrimeFaces.ab({source:this,event:'blur',process:'newOrder:odShipData',update:'newO>rder:odShipData',partialSubmit:true,oncomplete:function(xhr,status,args)>{focusOnShipToZip();;}}, arguments[1]);" tabindex="47" size="1" name="newOrder:shipToAddressType"> 
<option selected="selected" value="125">Domestic</option> 
<option value="126">International</option> 
<option value="127">Military</option> 
</select> 

Ecco quello che ho provato finora:

Navigazione pagina come ho manualmente Faccio la selezione nel menu a discesa, quindi inserisco il testo in un altro campo per spostare l'attenzione lontano dal menu a discesa per attivare l'evento sfocatura.Questo non ha funzionato.Ho anche provato a fare tabulazioni dal menu a discesa, anche no fortuna

Esecuzione javascript per attivare l'evento sfocatura So che il javascript è corretto, dal momento che posso eseguirlo correttamente da firebug: attiva un aggiornamento del secondo menu a discesa. Tuttavia, da WebDriver non sembra attivare nulla.

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("document.getElementById('newOrder:shipToAddressType').blur()"); 

Qualche suggerimento? Grazie per l'aiuto.

Modifica: Ho provato ad aggiungere "ritorno" alla stringa di script. Inoltre non ha funzionato:

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.getElementById('newOrder:shipToAddressType').blur()"); 

risposta

5

Qui ci sono un paio di idee:

Utilizzare una scheda per passare al campo successivo. Ciò simulerebbe un utente che colpisce il tasto TAB per passare al campo successivo e dovrebbe teoricamente simulare l'evento sfocatura del browser.

È possibile farlo utilizzando il metodo SendKeys:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
element.sendKeys("\t"); 

inserire codice JavaScript per simulare il metodo di sfocatura. Hai già provato a provare questo aspetto, ma hai dimenticato un aspetto importante di executeScript - sempre return il tuo codice!

JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.getElementById('newOrder:shipToAddressType').blur()"); 

Un'ultima cosa, sarebbe utile includere informazioni quale browser si sta usando, solo a scopo informativo.

UPDATE

Provate a dare fuoco diretto con l'elemento, e quindi unfocus (sfocatura) è:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("arguments[0].focus(); arguments[0].blur(); return true", element); 
+0

Grazie per l'input. Avevo già provato il tabbing (vedi il mio post originale), ma non avevo ancora provato ad aggiungere il reso. Darà questo andare. Grazie. – user973718

+0

Aggiunto 'return' alla mia stringa javascript. Nessuna modifica: nessun evento di sfocatura attivato. Aggiunto questo all'OP – user973718

+0

Nel tuo javascript, assicurati che l'elemento WebDriver ti venga restituito rimuovendo il '.blur()'. La tua variabile 'js' dovrebbe contenere un elemento WebDriver. Se non lo è, è per questo che la sfocatura non funziona ... non riesce a trovare l'elemento correttamente! Se lo è, andremo avanti da lì. – bbbco

0

Provare a utilizzare l'interazione di classe azioni, mouse supporto WebDriver e utente utilizzando questo classe Qualcosa di simile a questo:

WebElement element = driver.findElement(By.id('newOrder:shipToAddressType')); 
(new Actions(driver)).moveToElement(element ,500,500).build().perform(); 

questo sposterà il maggior numero di pixel come si imposta e innescare l'evento di sfocatura

2

Un'altra opzione è provare a fare scattare un clic su qualcosa oltre l'input, come il corpo.

driver.findElement(By.tagName("body")).click(); 

Questo funziona per me.

Problemi correlati