2009-05-06 9 views
22

साथ काम करता है मैं एक लिंक पर क्लिक जावा स्क्रिप्ट करना चाहते हैं पर page..I शुद्ध है कि इस तरह एक समारोह जोड़ने का सुझाव पर कुछ पाया जावास्क्रिप्ट के साथ एक लिंक पर क्लिक:अनुकरण कि IE

function fireEvent(obj,evt){ 

    var fireOnThis = obj; 
    if(document.createEvent) { 
     var evObj = document.createEvent('MouseEvents'); 
     evObj.initEvent(evt, true, false); 
     fireOnThis.dispatchEvent(evObj); 
    } else if(document.createEventObject) { 
     fireOnThis.fireEvent('on'+evt); 
    } 
} 

फिर फोन इसका उपयोग:

fireEvent(document.getElementById('edit_client_link'),'click'); 

यह एफएफ के लिए ठीक काम करता है लेकिन आईई के साथ यह काम नहीं करता है!

कोई विचार?

उत्तर

36

मुझे लगता है कि आपको अभी भी document.createEventObject पर कॉल करने की आवश्यकता है - आपने केवल यह जांच लिया है कि यह वहां है। अवांछित कोड निम्नानुसार है, लेकिन docs पर आधारित यह काम करना चाहिए।

function fireEvent(obj,evt){ 

    var fireOnThis = obj; 
    if(document.createEvent) { 
     var evObj = document.createEvent('MouseEvents'); 
     evObj.initEvent(evt, true, false); 
     fireOnThis.dispatchEvent(evObj); 

    } else if(document.createEventObject) { 
     var evObj = document.createEventObject(); 
     fireOnThis.fireEvent('on' + evt, evObj); 
    } 
} 
+17

मैं आगे अपने आप IE 7 में चला गया और यह परीक्षण किया है और यह काम करता है; अच्छी नौकरी! मैं इस तथ्य से नफरत करता हूं कि हर कोई और उनकी माँ हमेशा फ्रेमवर्क बैंडवागन पर कूदती हैं जब किसी ने बस एक जावास्क्रिप्ट प्रश्न पूछा। हां, हम जानते हैं, हम जानते हैं, jQuery सब कुछ कर सकता है और आपके लिए रात का खाना बना सकता है, लेकिन कभी-कभी यह जानना अच्छा होता है कि ऐसी लाइब्रेरी के बिना चीजें कैसे काम करती हैं। (मैं jQuery और MochiKit दोनों का उपयोग करता हूं, लेकिन मैं अभी भी सादे ओल 'जावास्क्रिप्ट का आनंद लेता हूं)। –

+1

रुको, यह समझ में नहीं आता है। आप 'document.createEventObject()' को कॉल कर रहे हैं, लेकिन यह लौटने की घटना के साथ कुछ भी नहीं कर रहा है। प्रश्न में कोड से यह अलग कैसे है, और यह (माना जाता है) क्यों काम करता है? मुझे लगता है कि जेसन ने कुछ और बदल दिया है जिसने अपना कोड काम करना शुरू कर दिया है। – s4y

+0

@ सिड, आप जेसन के बारे में कुछ बदल रहे हैं। यदि आपको आवश्यकता हो तो विवरण के लिए मेरा संशोधन देखें। – Louis

2

यह मेरे लिए पहले काम नहीं करता था और फिर मैंने देखा कि कोड आईई भाग के लिए पैरामीटर गुम है। यहाँ एक अद्यतन है कि काम करना चाहिए है:

function fireEvent(obj, evt) { 
    var fireOnThis = obj; 

    if (document.createEvent) { 
     // alert("FF"); 
     var evtObj = document.createEvent('MouseEvents'); 
     evtObj.initEvent(evt, true, false); 
     fireOnThis.dispatchEvent(evtObj); 
    } 

    else if (document.createEventObject) { 
     // alert("IE"); 
     var evtObj = document.createEventObject(); 
     fireOnThis.fireEvent('on'+evt, evtObj); 
    } 
} 
0

आप केवल लिंक के लिए क्लिक करता है अनुकरण करना चाहते हैं, तो आप इस का उपयोग कर सकते हैं:

function clickLink(id){ 
location.href=document.getElementById(id).href; 
} 
0

हम एक सरल तरीके से राइट क्लिक अनुकरण करने के लिए मिल गया (में परीक्षण किया IE8)। डबल क्लिक या दो एकल क्लिक का उपयोग करें, फिर Shift-F10 का उपयोग करके राइट-क्लिक करें। मुझे नहीं पता कि यह क्यों काम करता है, लेकिन यह करता है। नीचे दिए गए नमूना कोड में, हम सेलेनियम विधि का उपयोग दो बार क्लिक करने के लिए करते हैं, फिर WebElement को खोजने के लिए IE ड्राइवर का उपयोग करें और कुंजी अनुक्रम Shift-F10 भेजें, जो दाएं माउस बटन क्लिक को अनुकरण करता है। हम इसका उपयोग जीडब्ल्यूटी आधारित वेब ऐप्स का परीक्षण करने के लिए करते हैं। एक जगह यह काम नहीं करता था साथ ही पेड़ नियंत्रण में था जहां संदर्भ मेनू माउस के निर्देशांक में दिखाई देने के लिए सेट किया गया था। अक्सर, माउस निर्देशांक नकारात्मक थे, इसलिए मेनू आइटम पर राइट-क्लिक करने से बच्चे मेनू विकल्प प्रदर्शित नहीं हो पाए। इस मामले को संभालने के लिए, हमने नियंत्रण में थोड़ा कोड जोड़ा ताकि यदि माउस निर्देशांक नकारात्मक थे, तो संदर्भ मेनू 0,0 पर दिखाई देता है। अगर आप अभी भी त्रुटि (Jquery + प्रोटोटाइप का प्रयोग करें) हो रही है

selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]"); 
selenium.click("//td[@role='menuitem' and contains(text(), 'Add')]"); 
new InternetExplorerDriver().findElement(By.xpath("//td[@role='menuitem' and contains(text(), 'Add')]")).sendKeys(Keys.SHIFT, Keys.F10); 
+0

मुझे यकीन नहीं है कि 'InternetExplorerDriver' मानक सेटअप का हिस्सा है ... –

1

इस प्रयास करें

function fireEvent(element,event){ 
if (document.createEventObject){ 
// dispatch for IE 
try { 
     var evt = document.createEventObject(); 
     jQuery(element).change(); 
     return element.fireEvent('on'+event,evt); 
} catch(e) { }     
} 
else{ 
// dispatch for firefox + others 
var evt = document.createEvent("HTMLEvents"); 
evt.initEvent(event, true, true); // event type,bubbling,cancelable 
return !element.dispatchEvent(evt); 
} 
} 
+0

अच्छा एक jQuery कर्म फैल रहा है। –