جافا سكريبت محاكاة انقر بزر الماوس الأيمن خلال التعليمات البرمجية

StackOverflow https://stackoverflow.com/questions/433919

سؤال

وأنا أكتب بعض الاختبارات UI باستخدام السيلينيوم ولدي تحكم جافا سكريبت شجرة، وذلك باستخدام أدوات دوجو.

ولقد نفذت قائمة سياق لكل عقدة من الشجرة باستخدام الأمثلة التي توفر دوجو، ولكن أنا في حاجة إلى اختبار السيلينيوم إلى "استدعاء" حق انقر على عقدة شجرة، ولكن لا أستطيع الحصول على هذا العمل. الاختبارات ببساطة لا محاكاة الحدث بزر الماوس الأيمن فوق من خلال جافا سكريبت، وقائمة السياق لا تظهر.

لقد كان أي شخص أي خبرة في الاحتجاج حق انقر على قائمة سياق باستخدام دوجو والسيلينيوم؟ أو لديك أي أفكار عن كيفية القيام بذلك؟

هل كانت مفيدة؟

المحلول

وهذه محاولة بدلا من ذلك، والسبب ما فعلته الأمور لا تعمل تماما هو أن القائمة السياق هو في الواقع متجهة إلى الحدث 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);
    }
}

نصائح أخرى

وفقط لحسن التدبير، وهنا قليلا من الدوكو على المعلمات:

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

والسؤال الكبير!

ولقد قمت ببعض البحوث، ويبدو مثلك يمكن إطلاق حدث مثل الماوس <لأ href = "http://lifescaler.com/2008/04/simulating-mouse-clicks-in-javascript/" يختلط = " نوفولو noreferrer "> ويظهر هنا ، وجعلها بزر الماوس الأيمن فوق عن طريق تعيين button أو الممتلكات which إلى 2 (<لأ href =" http://www.quirksmode.org/js/events_properties.html# زر "يختلط =" نوفولو noreferrer "> موثقة هنا ).

ولعل هذا الرمز العمل:

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 الخ بشكل مناسب

وأنا أحاول ذلك في فايرفوكس وكروم، ولكن إيفاد الحدث contextmenu لا يجعل المتصفح لفتح قائمة السياق. يتم تشغيل الحدث لأنه أطلق رد بلدي لoncontextmenu، ولكن لا تزال قائمة السياق في عداد المفقودين. أي شخص لديه فكرة، لأنني استخدمت جميع العينات رمز من أعلاه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top