2010-03-30 202 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> 

我已閱讀,硒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不抱怨這些定位器不存在,所以我假設它可以看到選擇/選項元素罰款。這個問題似乎是onChange事件。

有誰知道如何解決這個問題?

謝謝。

+0

您使用哪種瀏覽器? – John 2010-03-30 12:07:18

+0

我正在測試Firefox 3.5.8。 – tohop 2010-03-30 12:29:18

回答

2

試過嗎?

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

fireEvent(element_id,event_to_trigger);

5

我正好碰到這個問題,但在IE只(火狐和谷歌Chrome正常工作對我來說)

我找到的解決方法是手動強制通過硒的runScript使用JavaScript更新。有些方法可以做到,可以在這裏找到:

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

例如,如果我在網頁中有jQuery的,我這樣做:

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

謝謝!這對我有效。 – sonicwizard 2011-09-08 20:23:21