Question

J'écris des tests d'interface utilisateur à l'aide de Selenium et j'ai un contrôle JavaScript Tree, à l'aide de la boîte à outils Dojo.

J'ai mis en place un menu contextuel pour chaque noeud de l'arborescence en utilisant les exemples fournis par Dojo, mais j'ai besoin du test Selenium pour "invoquer". Cliquez avec le bouton droit de la souris sur le noeud de l’arbre, mais je ne parviens pas à le faire fonctionner. Les tests ne simulent tout simplement pas l'événement de clic droit via JavaScript et le menu contextuel ne s'affiche pas.

Quelqu'un a-t-il déjà invoqué le clic droit sur un menu contextuel utilisant Dojo et Selenium? Ou avez-vous des idées sur la façon de le faire?

Était-ce utile?

La solution

essayez plutôt ceci, parce que les choses ne fonctionnent pas tout à fait, c'est que le menu contextuel est en fait lié à l'événement 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);
    }
}

Autres conseils

Juste pour faire bonne mesure, voici un peu de doco sur les paramètres:

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

Excellente question!

J'ai fait des recherches et il semble que vous puissiez déclencher un événement de souris comme est affiché ici et faites-en un clic droit en définissant le bouton ou le propriété sur 2 ( documenté ici ).

Peut-être que ce code fonctionnera:

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

Voici une version plus correcte si vous ne vous souciez pas de l'endroit où le menu contextuel est activé

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

Si vous le faites, nous devrons peut-être utiliser le précédent, corriger son comportement dans IE et renseigner correctement screenX, screenY, clientX, clientY, etc.

J'essaie ceci dans Firefox et Chrome, mais l'envoi de l'événement contextmenu ne permet pas au navigateur d'ouvrir le menu contextuel. L'événement est déclenché parce que mon rappel pour le menu oncontext est déclenché, mais que le menu contextuel est toujours manquant. Quelqu'un a une idée, car j'ai utilisé tous les exemples de code ci-dessus?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top