2010-03-30 7 views
10

J'ai essayé un certain nombre de choses pour essayer d'obtenir un événement 'onchange' dans un menu déroulant de Selenium, mais rien de tout cela n'a fonctionné.Sélénium onChange ne fonctionne pas

Le HTML incriminé est:

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

J'ai lu que Selenium IDE n'enregistre pas certains sur les événements *, et il serait donc sage d'utiliser 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"); 

Cependant, cela ne fonctionne pas (avec ou sans fireEvent). J'ai aussi essayé d'utiliser

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

au lieu de

$this->click("locator"); 

mais cela n'a rien fait. Le sélénium ne se plaint pas de l'inexistence de ces localisateurs, donc je suppose qu'il peut voir les éléments select/option. Le problème semble être l'événement onChange.

Est-ce que quelqu'un sait comment résoudre ce problème?

Merci.

+0

Quel navigateur utilisez-vous? – John

+0

Je suis en train de tester Firefox 3.5.8. – tohop

Répondre

2

a essayé ceci?

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

fireEvent (élément_id, événement_à_trigger);

5

j'ai rencontré exactement ce problème, mais uniquement dans Internet Explorer (Firefox et Google Chrome fonctionne très bien pour moi)

J'ai trouvé la solution pour être forcer manuellement la mise à jour en utilisant JavaScript par Sélénium de runScript. Voici quelques façons de faire qui peuvent être trouvés ici:

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

Par exemple, si je jQuery dans ma page Web, je ferais ceci:

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

Merci! Cela a fonctionné pour moi. – sonicwizard

Questions connexes