문제

Selenium을 사용하여 UI 테스트를 작성하고 있으며 DOJO 툴킷을 사용하여 JavaScript 트리 컨트롤이 있습니다.

Dojo가 제공하는 예제를 사용하여 트리의 각 노드에 대한 컨텍스트 메뉴를 구현했지만 트리 노드를 마우스 오른쪽 버튼으로 클릭하려면 Selenium 테스트가 필요하지만이 작업을 수행 할 수는 없습니다. 테스트는 JavaScript를 통해 마우스 오른쪽 버튼 클릭 이벤트를 시뮬레이션하지 않으며 컨텍스트 메뉴가 나타나지 않습니다.

Dojo와 Selenium을 사용하여 상황에 맞는 메뉴를 마우스 오른쪽 버튼으로 클릭 한 경험이 있습니까? 아니면 어떻게 해야하는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

대신 시도해보십시오. 일이 잘 작동하지 않은 이유는 컨텍스트 메뉴가 실제로 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);
    }
}

다른 팁

좋은 측정을 위해, 여기에 매개 변수에 대한 약간의 doco가 있습니다.

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

좋은 질문!

나는 약간의 연구를했는데, 당신이 여기에 표시됩니다, 설정하여 마우스 오른쪽 버튼으로 클릭하십시오 button 또는 which 2 ~ 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);
  }
}

상황에 맞는 메뉴가 어디에서 발사되는지 신경 쓰지 않으면 더 정확한 버전이 있습니다.

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 등을 적절하게 채워야 할 수도 있습니다.

Firefox와 Chrome에서 이것을 시도하고 있지만 ContextMenu 이벤트를 파견한다고해서 브라우저가 컨텍스트 메뉴를 열 수있는 것은 아닙니다. OnContextMenu의 콜백이 시작되었지만 컨텍스트 메뉴가 여전히 누락되어 이벤트가 트리거됩니다. 위의 모든 코드 샘플을 사용했기 때문에 아이디어가 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top