Selenium onChange无效

时间:2010-03-30 10:10:00

标签: events 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事件。

有谁知道如何解决这个问题?

感谢。

2 个答案:

答案 0 :(得分:5)

我遇到了这个问题,但仅在IE浏览器中(Firefox和Google Chrome对我来说很好)

我发现解决方案是通过Selenium的runScript手动强制使用JavaScript进行更新。有一些方法可以在这里找到:

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

例如,如果我的网页中有jQuery,我会这样做:

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

答案 1 :(得分:2)

尝试过这个吗?

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

fireEvent(element_id,event_to_trigger);