29

私は Selenium を使用していくつかの UI テストを作成しており、Dojo ツールキットを使用して JavaScript ツリー コントロールを作成しています。

Dojo が提供する例を使用して、ツリーの各ノードにコンテキスト メニューを実装しましたが、ツリー ノードの右クリックを「呼び出す」ために Selenium テストが必要ですが、これを機能させることができません。このテストでは、JavaScript による右クリック イベントがシミュレートされず、コンテキスト メニューが表示されません。

Dojo と Selenium を使用してコンテキスト メニューで右クリックを呼び出した経験のある人はいますか? または、それを行う方法についてのアイデアはありますか?

4

5 に答える 5

28

代わりにこれを試してみてください。コンテキスト メニューが実際には oncontextmenu イベントにバインドされているため、うまく機能しませんでした。

function contextMenuClick(element){
    var evt = element.ownerDocument.createEvent('MouseEvents');

    var RIGHT_CLICK_BUTTON_CODE = 2; // the same for FF and IE

    evt.initMouseEvent('contextmenu', true, true,
         element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
         false, false, false, RIGHT_CLICK_BUTTON_CODE, null);

    if (document.createEventObject){
        // dispatch for IE
       return element.fireEvent('onclick', evt)
     }
    else{
       // dispatch for firefox + others
      return !element.dispatchEvent(evt);
    }
}
于 2009-01-12T00:54:22.830 に答える
12

参考までに、ここにパラメータに関するドコを少し示します。

var myEvt = document.createEvent('MouseEvents');
myEvt.initMouseEvent(
   'click'          // event type
   ,true           // can bubble?
   ,true           // cancelable?
   ,window      // the event's abstract view (should always be window)
   ,1              // mouse click count (or event "detail")
   ,100           // event's screen x coordinate
   ,200           // event's screen y coordinate
   ,100           // event's client x coordinate
   ,200           // event's client y coordinate
   ,false         // whether or not CTRL was pressed during event
   ,false         // whether or not ALT was pressed during event
   ,false         // whether or not SHIFT was pressed during event
   ,false         // whether or not the meta key was pressed during event
   ,1             // indicates which button (if any) caused the mouse event (1 = primary button)
   ,null          // relatedTarget (only applicable for mouseover/mouseout events)
); 
于 2009-01-12T01:26:09.087 に答える
4

素晴らしい質問です。

私はいくつかの調査を行いましたが、ここに示されているようなマウスイベントを発生させ、 buttonorwhichプロパティを 2 に設定することで右クリックできるようです (ここに文書化されています)。

おそらく、このコードは機能します:

function rightClick(element){
  var evt = element.ownerDocument.createEvent('MouseEvents');

  var RIGHT_CLICK_BUTTON_CODE = 2; // the same for FF and IE

  evt.initMouseEvent('click', true, true,
      element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
      false, false, false, RIGHT_CLICK_BUTTON_CODE, null);

  if (document.createEventObject){
    // dispatch for IE
    return element.fireEvent('onclick', evt)
  }
  else{
    // dispatch for firefox + others
    return !element.dispatchEvent(evt);
  }
}
于 2009-01-11T23:24:36.490 に答える
3

コンテキストメニューが起動される場所を気にしない場合のより正しいバージョンは次のとおりです

function fireContextMenu(el) {
  var evt = el.ownerDocument.createEvent("HTMLEvents")
  evt.initEvent('contextmenu', true, true) // bubbles = true, cancelable = true

  if (document.createEventObject) {
    return el.fireEvent('oncontextmenu', evt)
  }
  else {
    return !el.dispatchEvent(evt)
  }
}

その場合、以前のものを使用し、IE での動作を修正し、screenX、screenY、clientX、clientY などを適切に設定する必要がある場合があります。

于 2009-01-12T01:16:27.903 に答える
2

私はFirefoxとChromeでこれを試していますが、contextmenuイベントをディスパッチしてもブラウザはコンテキストメニューを開くことができません。oncontextmenu のコールバックが発生したため、イベントがトリガーされましたが、コンテキスト メニューがまだありません。上記のすべてのコードサンプルを使用したので、誰かアイデアがありますか?

于 2011-07-19T19:07:04.397 に答える