Frage

Ich schreibe einige UI-Tests Selen verwendet, und ich habe ein JavaScript-Tree-Steuerelement, das Dojo Toolkit.

Ich habe ein Kontextmenü für jeden Knoten des Baumes implementiert, um die Beispiele verwenden, die Dojo liefern, aber ich brauche die Selenium Test, um den Rechtsklick auf den Baumknoten „aufrufen“, aber ich kann das nicht an die Arbeit. Die Tests einfach nicht simulieren nicht das Rechtsklick-Ereignis durch JavaScript und das Kontextmenü nicht angezeigt.

Hat jemand Erfahrung hatte das Rechtsklick auf ein Kontextmenü mit Dojo und Selen in Berufung? Oder irgendwelche Ideen, wie es zu tun?

War es hilfreich?

Lösung

Versuchen Sie stattdessen, Grund was die Dinge nicht ganz funktioniert hat, ist, dass Sie das Kontextmenü in der Tat auf die oncontextmenu Ereignis gebunden.

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);
    }
}

Andere Tipps

Nur für eine gute Maßnahme, hier ist ein bisschen doco zu den Parametern:

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)
); 

Gute Frage!

habe ich einige der Forschung, und es scheint, wie Sie ein Mausereignis wie hier gezeigt, und macht es zu einem rechts~~POS=TRUNC, indem das button oder which Eigenschaft auf 2 ( dokumentiert hier ).

Vielleicht ist dieser Code funktioniert:

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);
  }
}

Hier ist eine korrektere Version, wenn Sie nicht über egal wo das Kontextmenü wird gefeuert

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)
  }
}

Wenn Sie das tun, können wir die vorherige verwenden müssen, reparieren ist es Verhalten in IE und bevölkern die screenX, screenY, clientX, clientY usw. in geeigneter Weise

Ich versuche, dies in Firefox und Chrome, aber dem contextmenu Event Dispatching Browser nicht machen Kontextmenü zu öffnen. Das Ereignis wird ausgelöst, weil mein Rückruf für oncontextmenu abgefeuert wird, aber Kontextmenü fehlt noch. Jemand eine Idee hat, weil ich alle Codebeispiele verwendet von oben?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top