10

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 はいくつかの on* イベントを記録しないことを読んだので、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 イベントのようです。

これを解決する方法を知っている人はいますか?

ありがとう。

4

2 に答える 2

5

私はまさにこの問題に遭遇しましたが、IE でのみ (Firefox と Google Chrome は問題なく動作します)

Selenium のrunScript. これを行ういくつかの方法は、次の場所にあります。

入力に対して onchange イベントをプログラムで強制するにはどうすればよいですか?

たとえば、Web ページに jQuery がある場合、次のようにします。

$this->select('IDOfSelectElement', '*some label*');
$this->runScript("$('#IDOfSelectElement').trigger('change')");
于 2010-08-15T14:01:33.217 に答える
2

これを試しましたか?

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

fireEvent(element_id、event_to_trigger);

于 2010-05-24T09:01:35.463 に答える