2009-01-11 10 views
25

के माध्यम से राइट क्लिक करें मैं सेलेनियम का उपयोग करके कुछ यूआई परीक्षण लिख रहा हूं और मेरे पास दोजो टूलकिट का उपयोग करके जावास्क्रिप्ट ट्री कंट्रोल है।जावास्क्रिप्ट अनुकरण कोड

मैंने दोजो प्रदान किए गए उदाहरणों का उपयोग करके पेड़ के प्रत्येक नोड के लिए एक संदर्भ मेनू लागू किया है, लेकिन मुझे पेले नोड पर राइट क्लिक करने के लिए सेलेनियम परीक्षण की आवश्यकता है, लेकिन मैं इसे काम नहीं कर सकता। परीक्षण केवल जावास्क्रिप्ट के माध्यम से राइट-क्लिक ईवेंट अनुकरण नहीं करते हैं, और संदर्भ मेनू दिखाई नहीं देता है।

क्या किसी को Dojo और सेलेनियम का उपयोग कर संदर्भ मेनू पर राइट क्लिक करने का कोई अनुभव है? या इसके बारे में कोई विचार है कि इसे कैसे करें?

उत्तर

21

कोशिश इस बजाय, क्या कारण चीजें काफी काम नहीं किया था कि संदर्भ मेनू 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); 
    } 
} 
+0

बू-याआ जिसने चाल की, धन्यवाद Ieiyou। – Mark

4

शानदार सवाल!

मैं कुछ शोध किया, और इस तरह आप is shown here की तरह एक माउस ईवेंट को सक्रिय कर सकते हैं, और यह एक 2 (documented here) को button या which संपत्ति की स्थापना द्वारा राइट क्लिक कर ऐसा लगता है।

शायद यह कोड काम करेगा:

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

यहाँ एक अधिक सही संस्करण है अगर तुम कहाँ प्रसंग मेनू निकाल दिया जाता के बारे में परवाह नहीं है

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 पॉप्युलेट आदि उचित रूप से

+0

धन्यवाद, मुझे वास्तव में यह नहीं लगता कि यह कहां होता है, लेकिन भविष्य में ऐसा करना अच्छा हो सकता है ... – Mark

+0

यदि आप jQuery का उपयोग कर रहे हैं, तो तत्व पर राइट-क्लिक करना भी आसान है: $ (your_element) .trigger ('संदर्भ की विकल्प - सूची'); इस संदर्भ में – sunaku

7

बस अच्छा उपाय है, यहाँ मानकों पर 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) 
); 
+0

+1 सहायक – Thariama

2

मैं इसे फ़ायरफ़ॉक्स और क्रोम में आजमा रहा हूं, लेकिन contextmenu ईवेंट प्रेषण ब्राउज़र को संदर्भ मेनू खोलने के लिए नहीं बनाता है। इवेंट ट्रिगर किया गया है क्योंकि oncontextmenu के लिए मेरा कॉलबैक निकाल दिया गया है, लेकिन संदर्भ मेनू अभी भी गायब है। किसी के पास कोई विचार है, क्योंकि मैंने ऊपर से सभी कोड नमूने इस्तेमाल किए हैं?

+0

FWIW मुझे एक ही समस्या है - शायद यह सुरक्षा या कुछ के लिए हाल के-आईएसएच संस्करणों में अक्षम था? – Coderer

+0

ओपी ने अपना खुद का संदर्भमेन मेनू लागू किया, जावास्क्रिप्ट का उपयोग कर ब्राउज़र के संदर्भमेन को ट्रिगर करना संभव नहीं है। – automaton

संबंधित मुद्दे