2010-08-11 13 views
9

हैलोसी # Watin - हर चेतावनी संवाद खिड़की

जो लोग WatiN का इस्तेमाल किया है की संभावना भी DialogHandlers इस्तेमाल किया पर क्लिक करने के ठीक बटन एक AlertDialogHandler जोड़ें।

खैर कोई मुझे सिखा सकते हैं मैं एक DialogHandler है कि किसी भी चेतावनी बॉक्स window.alert() संभाल लेंगे Watin नियंत्रण में एक विशिष्ट आईई उदाहरण के, कैसे प्रदान कर सकते हैं।

डायलॉग हैंडलर को केवल बहुत ही सतर्क संवाद बॉक्स के लिए ओके बटन में क्लिक करना होगा, उस स्थिति में मुझे लगता है कि हमें AlertDialogHandler की आवश्यकता है जो मूल रूप से केवल ठीक बटन पर क्लिक करना होगा।

AlertDialogHandler.OKButton.Click() 

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

यह मेरे सिर को घंटों तक बांधने के रूप में, किसी भी मदद की सराहना की जाती है। धन्यवाद।

नोट: कभी-कभी अलर्ट संवाद विंडो में दो बटन होते हैं। Thats क्यों मुझे वास्तव में ठीक बटन क्लिक करने की आवश्यकता है, न कि संवाद विंडो बंद करें।

उत्तर

16

वर्ग बनाएँ:

public class OKDialogHandler : BaseDialogHandler 
{ 
    public override bool HandleDialog(Window window) 
    { 
     var button = GetOKButton(window); 
     if (button != null) 
     { 
      button.Click(); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override bool CanHandleDialog(Window window) 
    { 
     return GetOKButton(window) != null; 
    } 

    private WinButton GetOKButton(Window window) 
    { 
     var windowButton = new WindowsEnumerator().GetChildWindows(window.Hwnd, w => w.ClassName == "Button" && new WinButton(w.Hwnd).Title == "OK").FirstOrDefault(); 
     if (windowButton == null) 
      return null; 
     else 
      return new WinButton(windowButton.Hwnd); 
    } 
} 

IE के कहने बनाने के बाद, यह करने के लिए संवाद हैंडलर देते हैं:

ie.AddDialogHandler(new OKDialogHandler()); 

यह संवाद हैंडलर सभी खिड़कियां संभाल लेंगे, कि एक बटन "ठीक है" शीर्षक के साथ शामिल , उस बटन पर क्लिक करके।

+0

स्वच्छ और सरल। यह घड़ी की तरह काम कर रहा है। धन्यवाद। –

+0

@prostynick -may मुझे पता है कि WindowsEnumerator किस वर्ग से संबंधित है? ऐसा लगता है कि आपकी कक्षा OKDialogHandler का क्रूक्स है.- दोह! मैंने इसे बेसडिअलॉग हैंडलर में पाया। धन्यवाद! – voidmain

+0

नहीं, मैं गलत था। मुझे बेसडिअलॉग हैंडलर में WindowsEnumerator नहीं मिला, बल्कि WatiN.Core.Native.InternetExplorer में। – voidmain

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