2010-03-30 5 views
10

Я попробовал несколько вещей, чтобы попытаться получить Selenium, чтобы выбрать событие onchange в раскрывающемся меню, ни одно из которого не сработало.Selenium onChange не работает

Нарушитель HTML является:

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

Я прочитал, что Selenium IDE не записывает некоторые на * событий, и поэтому было бы разумно использовать 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"); 

Однако это не работает (с или без fireEvent). Я также попытался с помощью

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

вместо

$this->click("locator"); 

, но это ничего не делал.

Selenium не жалуется на то, что эти локаторы не существуют, поэтому я предполагаю, что он может прекрасно видеть элементы select/option. Проблема заключается в событии onChange.

Кто-нибудь знает, как это решить?

Спасибо.

+0

Какой браузер вы используете? – John

+0

Я тестирую Firefox 3.5.8. – tohop

ответ

2

попробовал?

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

fireEvent (element_id, event_to_trigger);

5

я столкнулся именно с этой проблемой, но в IE только (Firefox и Google Chrome отлично работает для меня)

Я нашел решение вручную принуждая обновления с помощью JavaScript через Selenium, runScript. Некоторые способы сделать это можно найти здесь:

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

Например, если у меня есть JQuery в моей веб-странице, я хотел бы сделать это:

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

Спасибо! Это сработало для меня. – sonicwizard

Смежные вопросы