2011-01-20 13 views
7

के लिए प्रतीक्षा करना चाहता हूं, मुझे उम्मीद है कि वहां से किसी ने ऐसा किया है। मेरे पास कुछ कस्टम jQuery संशोधन हैं जो प्रोसेसिंग के लिए कुछ ईवेंट लॉन्च करने के लिए jQuery इवेंट सिस्टम का उपयोग करते हैं। मैं इनके जवाब में स्वचालित परीक्षण करने में सक्षम होना चाहता हूं।WatiN के साथ, मैं एक jQuery ईवेंट

क्या किसी ने WatiN से jQuery में बेहतर टाई पर काम किया है? मैंने jQuery चयनकर्ताओं के लिए पासथ्रू पर कुछ पोस्ट देखी हैं, साथ ही साथ दिए गए टेक्स्ट को बदलने के लिए प्रतीक्षा करने के बारे में यहां एक पोस्ट देखी है ... अगर कोई jQuery चयन जोड़ता है, और ईवेंट समर्थन ... तो भी अच्छा होगा .getElementsBySelector अच्छा हो सकता है।

+0

वास्तव में क्या आप क्या करना चाहते हैं? मेरे वेब परीक्षणों ने एक jQuery कोड का उपयोग किया जो प्रत्येक पृष्ठ पर इंजेक्शन दिया जाता है, यह कोड वाटिन ब्राउज़र के एक्सटेंशन को दो विधियों के साथ अनुमति देता है, एक सीएसएस चयनकर्ता के लिए और दूसरा प्रतीक्षा करने के लिएForAjaxComplete (जो कुछ बाध्यकारी उपयोग करता है। AJAXStart और jQuery पक्ष पर AJAXStart)। मुझे यकीन है कि मैं आपकी मदद कर सकता हूं। तो क्या आपके पास वाटीएन पक्ष पर क्या करना है इसका एक उदाहरण है? JQuery में –

+0

, मैंने jquery सत्यापन फ्रेमवर्क बढ़ाया है, और कुछ घटनाएं हैं जो मैं सर्वर-साइड को सुनना चाहता हूं .... जब किसी प्रपत्र की "validation.success" ईवेंट आग लगती है, तो मैं एक प्रतीक्षा सर्वर सर्वर की तरफ करना चाहता हूं जो उस घटना के लिए सुनता है, और जब यह फ़ाइल करता है, तो परिणामों का निरीक्षण करें ... "validation.failure" आदि के लिए ... यह मुझे ब्राउज़र परिप्रेक्ष्य से सत्यापन परिणामों का परीक्षण करने की अनुमति देगा। एक और उदाहरण है कि कुछ अनुकूली परिणाम जेएसओएन के रूप में वापस आ जाएंगे, HTML नहीं। – Tracker1

+0

उपर्युक्त एक उदाहरण है ... संक्षेप में, ब्राउज़र खोलने के दौरान, कुछ घटनाएं इंतजार कर रही हैं, घटनाओं की प्रतीक्षा कर रहे हैं ... कथन जिनके खिलाफ परीक्षण किया जा सकता है। JQuery आधारित घटनाओं के लिए सुनना। – Tracker1

उत्तर

7

मुझे नहीं पता कि आप क्या उम्मीद करते हैं, लेकिन मेरे पास जांच करने के लिए कुछ समय था और मैं प्रश्न के समाधान के साथ आया: WatiN के साथ, मैं एक jQuery घटना के लिए इंतजार करना चाहता हूं।

लक्ष्य सी # में लिखने के लिए:

Browser.WaitForEvent("#link", "onclick"); 

मैं एक परीक्षण पृष्ठ (http://www.sp4ce.net/debug.html पर उपलब्ध है) जहां यह लिंक पर एक onclick ईवेंट ट्रिगर करता है जब आप बटन पर क्लिक करें लिखा था।

तब मैंने लिखा विस्तार विधि .WaitForEvent

public static void WaitForEvent(this Browser browser, string selector, string eventname) 
{ 
    using (EventMonitorWatcher monitor = new EventMonitorWatcher(browser, selector, eventname)) 
    { 
     int timeWaited = 0; 
     var maxTimeWait = Settings.WaitForCompleteTimeOut * 1000; 
     do 
     { 
     Thread.Sleep(Settings.SleepTime); 
     timeWaited += Settings.SleepTime; 
     } 
     while (!monitor.IsEventCalled() && timeWaited < maxTimeWait); 
    } 
} 

यह तरीकों एक EventMonitorWatcher कि जाँच घटना बुलाया गया है है का उपयोग करता है।

public class EventMonitorWatcher : IDisposable 
{ 
    private readonly Browser _browser; 
    private readonly string _selector; 
    private readonly string _eventname; 

    public EventMonitorWatcher(Browser browser, string selector, string eventname) 
    { 
     _browser = browser; 
     _selector = selector; 
     _eventname = eventname; 
     _browser.Eval(string.Format("startEventMonitor('{0}', '{1}')", _selector, _eventname)); 
    } 

    public bool IsEventCalled() 
    { 
     string result = _browser.Eval(string.Format(
     "isEventCalled('{0}', '{1}')", _selector, _eventname)); 
     return result == "true"; 
    } 

    public void Dispose() 
    { 
     _browser.Eval(string.Format("stopEventMonitor('{0}', '{1}')", _selector, _eventname)); 
    } 
} 

इस पर नजर रखने के उपयोग तीन जावास्क्रिप्ट (jQuery संचालित) तरीकों कि एक निगरानी शुरू होता है, एक निगरानी और चेक करना बंद कर दे घटना बुलाया गया है।

startEventMonitor = function(selector, event) { 
    $(selector).data('eventMonitorResult', false); 
    var eventMonitorHandler = function() { 
     $(selector).data('eventMonitorResult', true) 
    }; 
    $(selector).data('eventMonitorHandler', eventMonitorHandler); 
    $(selector).bind(event, eventMonitorHandler); 
}; 

stopEventMonitor = function(selector, event) { 
    $(selector).undbind(event, $(selector).data('eventMonitorHandler')); 
    $(selector).data('eventMonitorResult', false); 
}; 

isEventCalled = function(selector, event) { 
    return $(selector).data('eventMonitorResult'); 
}; 

यहां आप हैं, तो आपको ब्राउज़र चलाने पर अपने पृष्ठ को स्ट्रिंग के रूप में इस जावास्क्रिप्ट को इंजेक्ट करने की आवश्यकता है।

[Test] 
public void Test() 
{ 
    using(var browser = new IE("http://www.sp4ce.net/debug.html") 
    { 
     browser.Eval(JavaScript); 
     browser.WaitForEvent("#link", "onclick"); 
    } 
} 

इस परीक्षण में, जब आप "क्लिक करें" बटन पर क्लिक करते हैं, तो परीक्षण सीधे समाप्त होना चाहिए और आपका ब्राउज़र बंद होना चाहिए;

+0

यह वास्तव में अच्छा है ... आदर्श रूप में, मैं सक्षम होना चाहता हूं दोनों एक दिए गए कार्यक्रम को सुनें और परिणाम का विश्लेषण करें, श्रोता के रूप में ईवेंट के रूप में कहा जाता है। मेरे मामले में यह एक ब्राउज़र घटना नहीं है, लेकिन एक कस्टम jQuery घटना है .. सुनिश्चित नहीं है कि यह संभव है या नहीं। – Tracker1

3

कुछ जावास्क्रिप्ट को इंजेक्ट क्यों न करें जो उस ईवेंट को जोड़ता है जिसे आप सुनना चाहते हैं। आपके जावास्क्रिप्ट इवेंटकोड में जब ईवेंट की आग लगती है, तो आप डोम में एक तत्व जोड़ सकते हैं जिसमें आप रुचि रखते हैं। उदाहरण के लिए एक डिव बनाएं और उस आउटपुट के साथ आंतरिक एचटीएमएल सेट करें जिसे आप देखना चाहते हैं। Div को एक अद्वितीय आईडी दें।

बेसिक प्रवाह:

  • browser.RunScript (javascript_here_to_attach_to_the_events_you_are_interested_in) मान जब घटना के सक्रिय होने पर अपने इंजेक्शन कोड id = "my_event_result" के साथ एक डिव बनाता है कि सुविधा देता है।

  • कार्रवाई है कि आपके सत्यापन कोड (अच्छा/गलत मूल्यों inputting की तरह) को गति प्रदान करते हैं उदाहरण: browser.TextField (textFieldIdWithValidation) .Typetext ("कुछ मूल्य");

  • div प्रकट होने की प्रतीक्षा करें: ब्राउज़र। Div ("my_event_result")।WaitUntilExists();

  • div में मान (ओं) डालें: बूल परिणाम = ब्राउज़र। डीआईवी ("my_event_result")। पाठ == "अपेक्षित परीक्षण";

HTH, जेरोन

0

मैं इस के लिए उम्मीद नहीं कर रहा हूँ के बाद से मैं न समय Watin की जाँच करने के लिए है सही जवाब हो सकता है, में मदद मिलेगी नोटों की बस कुछ ही आपको अपना काम करने , पहला बंदर पैच jQuery:

चूंकि सभी jQuery ईवेंट फ़ंक्शन ट्रिगर के साथ ट्रिगर किए जाते हैं। ('-' के साथ एक स्ट्रिंग के रूप में एक विभाजक के रूप में)

var _trigger = jQuery.prototype.trigger; 
jQuery.prototype.trigger = function() { 
     _trigger.apply(this, arguments); 
     alert(Array.prototype.join.call(arguments, '-')); 
} 

यह आपके पृष्ठ चेतावनी सभी तर्कों हर बार कुछ शुरू हो रहा है दिया होगा, आम तौर पर पहला तर्क घटना होगी। नहीं तो मैं इसे छोड़ने और watij या कुछ और के साथ जा रहा सुझाव देते हैं Watin, समारोह है कि अलर्ट पर कब्जा किसी तरह का होना चाहिए, व्यक्तिगत रूप से मेरा सुझाव है HTMLUNIT

इसके अतिरिक्त यदि आपका क्या, ईवेंट को ट्रिगर ऊपर समारोह के अंदर, this होगा में रुचि कि :) इंगित

सामग्री तुम बाहर की जाँच करनी चाहिए:
http://api.jquery.com/event.result/
http://api.jquery.com/event.data/

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