2011-01-14 6 views

Respuesta

1

Su solución se encuentra normalmente por mirar el código JavaScript ..

Una opción que siempre tienen es poner en valor y de forma manual desencadenar el evento OnChange real de código.

Hay un tema abierto sobre este link text Problema con FireFox Windows no ser activo y evita que el AlCambiar que se active.

probar este comando antes de usar typeKeys:

selenium.selectWindow(null); 
+0

estoy usando IDE. Esto es lo que hice. [#Executing: | getEval | selenium.selectWindow (null) || ] No funciona. Error: selenium.selectWindow no es una función –

+0

Yo normalmente sólo funcionan con selenio RC y no estoy seguro es incluso posible resolver algunos de los problemas con el IDE .. Usted debe actualizar su pregunta con esa información – StefanE

3

Si está utilizando 1.x selenio, hay un comando fireEvent que se puede utilizar para activar manualmente el evento onChange después de escribir el valor. Tal vez eso resolvería tu problema?

1

Esto funcionó para mí en IDE hacer los 3 comandos siguientes con el fin

Typekeys targetID input 
FireEvent targetID focus 
Type  targetID input 

La fuente es el siguiente (entrada era carta 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

Para activar el evento onchange, tratan agregando este comando en Selenium IDE:

fireEvent targetID blur

+0

Esto debería ser la respuesta aceptada (en mi humilde opinión). ¡Esto era * exactamente * lo que necesitaba! Además, en mi caso, esto tenía que usarse con 'sendKeys' en lugar de' type'. Muchas gracias por esto, @trex. – OscuroAA

5

Firefox tiene un bug que evita que se ejecuten algunos eventos mientras la ventana del navegador está desenfocada. Esto podría ser un problema cuando está ejecutando sus pruebas de automatización, que podría estar tipeando incluso si la ventana está desenfocada.

Para solucionar este problema que desencadenó el evento de cambio "manualmente", la inyección de javascript en mis pruebas .:

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

Como habrá notado, estoy usando jQuery para desencadenar el evento de cambio. Si no está usando jQuery en su aplicación, puede verificar here cómo desencadenarlo usando vainilla javascript.

Espero que ayude a alguien.

+0

No parece funcionar para campos de entrada de archivos – ndtreviv

0

Tuve un problema similar, con una lista desplegable hecha con Ajax.
A medida que el usuario escribe en un campo, el sistema muestra AJAX div w con varias opciones, cada uno como un enlace con target='#'

Y lo que es peor, hubo una función llamada en la onchange() que llenaba una la señal de sistema, y ​​que la bandera se utilizarían como una validación en el form.submit() (oh, el dolor)

de todas formas, mi solución para esto:
1 - selenio Sendkeys de comandos para el div Ajax aparecería

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

2 - esperar a que el vínculo con la opción de espera que aparezca

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

3 - selenio clickAt el enlace

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


4 - Aquí está la de las capturas: fuego manualmente el onchange() Y desenfoque eventos. Además, FOCE el navegador para establecer el foco en diferente 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 - Por último, para estar seguro, hice selenio no ejecutar el comando ClickAt() en el botón Enviar de la forma de, entre un mouseDown y MouseUp comandos

<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> 


No es elegante, pero funcionó.

Cuestiones relacionadas