2011-01-14 15 views

risposta

1

La soluzione normalmente si trova guardando il codice JavaScript ..

Un'opzione che avete sempre è quello di mettere in valore e manualmente innescare l'evento reale OnChange dal codice.

C'è un problema aperto su questo link text Problema con FireFox Windows non è attivo e impedisce l'attivazione di OnChange.

Prova questa prima di usare il comando typeKeys:

selenium.selectWindow(null); 
+0

Sto usando IDE. Questo è quello che ho fatto. [#Esecuzione: | getEval | selenium.selectWindow (null) || ] Non funziona. Errore: selenium.selectWindow non è una funzione –

+0

Normalmente lavoro solo con Selenium RC e non sono sicuro che sia possibile risolvere alcuni dei problemi con l'IDE. Dovresti aggiornare la tua domanda con queste informazioni – StefanE

3

Se stai usando Selenio 1.x, esiste un comando fireEvent che è possibile utilizzare per attivare manualmente l'evento onChange dopo aver digitato il valore. Forse risolverebbe il tuo problema?

1

questo ha lavorato per me in IDE effettuare le seguenti 3 comandi al fine

Typekeys targetID input 
FireEvent targetID focus 
Type  targetID input 

La fonte assomiglia a questo (ingresso era lettera r)

<tr> 
<td>typeKeys</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
<tr> 
<td>fireEvent</td> 
<td>//form/input</td> 
<td>focus</td> 
<tr> 
<td>fireEvent</td> 
<td>//form/input</td> 
<td>focus</td> 
</tr> 
<tr> 
<td>type</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
</tr> 
<tr> 
<td>type</td> 
<td>//form/input</td> 
<td>r</td> 
</tr> 
8

Per attivare l'evento onchange, provare aggiungendo questo comando in Selenium IDE:

fireEvent targetID blur

+0

Questo dovrebbe essere la risposta accettata (IMHO). Questo era * esattamente * quello di cui avevo bisogno! Inoltre, nel mio caso, questo doveva essere usato con 'sendKeys' piuttosto che' type'. Grazie mille per questo, @trex. – OscuroAA

5

Firefox ha uno bug che impedisce l'esecuzione di alcuni eventi mentre la finestra del browser non è a fuoco. Questo potrebbe essere un problema quando esegui i test di automazione, che potrebbero essere digitati anche se la finestra non è a fuoco.

Per risolvere questo problema che ha generato l'evento cambiamento "manualmente", iniettando javascript nelle mie prove .:

//suppose "element" is an input field 
element.sendKeys("value"); 
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; 
jsExecutor.executeScript("$(arguments[0]).change();", element); 

Come forse avrete notato, sto usando jQuery per attivare l'evento di modifica. Se non usi jQuery nella tua app, puoi controllare here come attivarlo usando vanilla javascript.

La speranza che aiuta qualcuno.

+0

Sembra non funzionare per i campi di input dei file – ndtreviv

0

Ho avuto un problema simile, con un elenco a discesa realizzato con Ajax.
Mentre l'utente digita in un campo, il sistema visualizza AJAX div w con diverse opzioni, ognuno come collegamento con target='#'

E, peggio ancora, c'era una funzione chiamata sul onChange() che riempiva un flag di sistema, e quella bandiera sarebbe stato utilizzato come una verifica della form.submit() (oh, il dolore)

in ogni modo, la mia soluzione per questo:
1 - il selenio Sendkeys di comando in modo che il div Ajax apparirebbe

<tr> 
    <td>sendKeys</td> 
    <td>id=txtTipoDocumento</td> 
    <td>ipsum lorem</td> 
</tr> 

2 - attendere che il legame con l'opzione prevista per apparire

<tr> 
    <td>waitForElementPresent</td> 
    <td>link=ipsum lorem</td> 
    <td></td> 
</tr> 

3 - selenio clickAt il link

<tr> 
    <td>clickAt</td> 
    <td>link=ipsum lorem</td> 
    <td>10,20</td> 
</tr> 


4 - Ecco quello della le prese: spara manualmente il onChange() E sfocatura eventi. Inoltre, foce del browser per impostare il fuoco su diversa campo

<tr> 
     <td>fireEvent</td> 
     <td>id=txtTipoDocumento</td> 
     <td>blur</td> 
    </tr> 
    <tr> 
     <td>fireEvent</td> 
     <td>id=selSerie</td> 
     <td>change()</td> 
    </tr> 
    <tr> 
     <td>fireEvent</td> 
     <td>id=selSerie</td> 
     <td>blur</td> 
    </tr> 
    <tr> 
     <td>focus</td> 
     <td>id=imgDataElaboracao</td> 
     <td></td> 
    </tr> 

5 - Infine, per essere sicuro, ho fatto selenio fare eseguire il comando ClickAt() sul pulsante Invia della forme, tra un mouseDown e MouseUp comandi

<tr> 
    <td>mouseDown</td> 
    <td>id=btnSalvar</td> 
    <td></td> 
</tr> 
<tr> 
    <td>focus</td> 
    <td>id=btnSalvar</td> 
    <td></td> 
</tr> 
<tr> 
    <td>clickAt</td> 
    <td>id=btnSalvar</td> 
    <td>10,20</td> 
</tr> 


Non elegante, ma ha funzionato.

Problemi correlati