Estoy escribiendo algunos de interfaz de usuario pruebas con Selenium y tengo un JavaScript control de Árbol, usando el kit de herramientas Dojo.

He implementado un menú contextual para cada nodo del árbol se utiliza en los ejemplos que el Dojo, pero necesito el Selenio prueba para «invocar» el clic derecho en el nodo del árbol, pero no puedo conseguir que esto funcione. Las pruebas simplemente no simular la derecha-haga clic en evento a través de JavaScript, y el contexto en el menú no se muestra.

Alguien ha tenido alguna experiencia en la invocación de la derecha haga clic en el menú de contexto usando Dojo y el Selenio? O tiene alguna idea de cómo hacerlo?

InformationsquelleAutor Mark | 2009-01-11

5 Comentarios

  1. 27

    probar este lugar, razón por la qué las cosas no salieron exactamente de trabajo es que el menú de contexto es, de hecho, ligado a la oncontextmenu evento.

    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);
        }
    }
    • Booo-Yaaa que hizo el truco, gracias Ieiyou.
  2. 9

    Para la buena medida, aquí es un poco de doco en los parámetros:

    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)
    ); 
    • +1 útil en este contexto
  3. 4

    Gran pregunta!

    Hice un poco de investigación, y parece que puede disparar un evento de ratón como se muestra aquí, y hacer un clic derecho mediante el establecimiento de la button o which propiedad a 2 (se documenta aquí).

    Quizás este código funcionará:

    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);
      }
    }
  4. 3

    Aquí es más una versión correcta si no se tiene cuidado acerca de dónde el menú contextual que se despiden hasta

    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 lo hace, puede que tengamos que utilizar la anterior, con la corrección de su comportamiento en IE, y rellenar el screenX, screenY, clientX, clientY etc adecuadamente

    • Gracias, yo no realmente importa donde ocurre, pero también podría ser bueno para hacerlo en el futuro…
    • Si usted está usando jQuery, haga clic en un elemento, es aún más simple: $(your_element).trigger(‘contextmenu’);
  5. 2

    Estoy intentando esto en firefox y chrome, pero el envío de la contextmenu evento no hacer explorador para abrir el menú contextual. Evento se desencadena porque mi devolución de llamada para oncontextmenu es despedido, pero el menú de contexto que aún falta. Alguien tiene una idea, porque yo todos los ejemplos de código anteriores?

    • Por lo que vale, yo tengo el mismo problema, tal vez esta fue desactivado en algunos de los recientes-ish versiones para la seguridad o algo?
    • OP implementado su propia contextmenu menús, no es posible activar el navegador contextmenu el uso de javascript.

Dejar respuesta

Please enter your comment!
Please enter your name here