2010-03-30 16 views
10

He intentado varias cosas para intentar que Selenium recoja un evento 'onchange' de un menú desplegable, ninguno de los cuales ha funcionado.Selenium onChange no funciona

El HTML infractor es:

<select onchange="doOpperation(this.options[this.selectedIndex]); this.selectedIndex = 0;" name="opps_ondemand" id="opps_ondemand"> 
    <option value="none" id="ondemand">Mark as...</option> 
    <option cmd="blah1" value="add">Something</option> 
    <option cmd="blah2" value="remove">None</option> 
</select> 

He leído que el selenio IDE no registra algunos de los eventos *, y por lo que sería aconsejable utilizar fireEvent():

$this->click("opps_ondemand"); 
$this->select("opps_ondemand", "label=Mark as..."); 
$this->click("//option[@value='add']"); 
sleep(3); 
$this->fireEvent("//select[@id='opps_ondemand']", "change"); 

Sin embargo, esto no funciona (con o sin fireEvent). También he intentado usar

$this->fireEvent("locator", "click"); 

en lugar de

$this->click("locator"); 

pero esto no hizo nada.

Selenium no se queja de que estos localizadores no existan, así que supongo que puede ver bien los elementos de selección/opción. El problema parece ser el evento onChange.

¿Alguien sabe cómo resolver esto?

Gracias.

+0

Qué navegador está usando? – John

+0

Estoy probando en Firefox 3.5.8. – tohop

Respuesta

2

intenté esto?

$this->fireEvent("opps_ondemand", "onchange"); 

fireEvent (element_id, event_to_trigger);

5

me encontré exactamente este problema, pero en IE sólo una (Firefox y Google Chrome funciona bien para mí)

encontré que la solución sea forzar manualmente la actualización usando JavaScript a través de selenio runScript. Algunas maneras de hacer que se pueden encontrar aquí:

How do I programmatically force an onchange event on an input?

Por ejemplo, si tengo jQuery en mi página web, me gustaría hacer esto:

$this->select('IDOfSelectElement', '*some label*'); 
$this->runScript("$('#IDOfSelectElement').trigger('change')"); 
+0

¡Gracias! Esto funcionó para mí. – sonicwizard