Подтвердить что ты не робот

Селен 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.

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

Спасибо.

4b9b3361

Ответ 1

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

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

Как программно заставить событие onchange на входе?

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

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

Ответ 2

попробовал это?

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

fireEvent (element_id, event_to_trigger);