2010-09-21 14 views
15

खोलने के दौरान इंटरनेट एक्सप्लोरर व्यस्त त्रुटि है। मैं एक विशिष्ट वेबसाइट ब्राउज़ करने के लिए वैटिन आईई घटक का उपयोग कर रहा हूं स्टार्टबॉउजिंग बटन पर क्लिक करें, मैं WatiN.Core.IE की ऑब्जेक्ट शुरू कर रहा हूं और पास कर रहा हूं के रूप में नीचे दिए कोड स्निपेट में दिखाया गया वेबसाइट खोलने के लिए वेबसाइट यूआरएल: -WatiN.Core.IE घटक टाइमआउट दे रहा है जबकि यूआरएल

WatiN.Core.IE ie; 

private void btnStartBrowsing_Click(object sender, EventArgs e) 
{   
    ie = new IE(URLs.mainURL); 
} 

कभी कभी या बल्कि मैं 5/10 बार मैं इस त्रुटि हो रही है कहना चाहिए: - "समय समाप्त करते हुए इंटरनेट एक्सप्लोरर व्यस्त"

इस समस्या को हल करने के लिए कैसे ??

उत्तर

9

यह संभव है कि आईई इंस्टेंस ठीक तरह से निपटान नहीं किया जा रहा है। आप टास्क मैनेजर को देखना चाहते हैं और देखें कि आपके द्वारा चल रहे IEXPLORE.EXE प्रक्रियाओं को कितनी खुली है। आप दो से अधिक है, तो मैं एक का उपयोग कर ब्लॉक को लागू करने का सुझाव देते हैं और उसके बाद फिर कार्य प्रबंधक जाँच:

using (IE ie = new IE(URLs.mainURL) 
{ 
    ... 
} 

इससे भी बेहतर समाधान AttachTo विधि का उपयोग किया जाएगा एक बार आप एक "मास्टर" ब्राउज़र उदाहरण चर प्रारंभ किया है :

private IE ie = new IE(); 

public void btnStartBrowsing_Click(object sender, EventArgs e) 
{ 
    using ie2 = ie.AttachTo<IE>(Find.ByUrl(URLs.mainURL)) 
    { 
     ... 
    } 
} 

अद्यतन: जब से तुम सत्र की अवधि के लिए ब्राउज़र की पहुंच की जरूरत है, मैं दृढ़ता से ब्राउज़र वस्तु घर में एक सिंगलटन वस्तु का उपयोग कर सुझाव है:

public sealed class BrowserIE 
{ 
    static readonly IE _Instance = new IE(); 

    static BrowserIE() 
    { 
    } 

    BrowserIE() 
    { 
    } 

    public static IE Instance 
    { 
     get { return _Instance; } 
    } 
} 

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

BrowserIE.Instance.GoTo(URLs.mainURL); 
Divs headerDivs = BrowserIE.Instance.Divs.Filter(Find.ByClass("header")); 
+0

इतने देर से उत्तर नील टी के लिए खेद है, लेकिन मैं उपयोग करने के लिए विभिन्न आर्किटेक्चर पर विचार कर रहा था लेकिन अभी भी मुझे वें त्रुटि मिल रही थी ....... इसके अलावा मुझे आवेदन चलाने की पूरी अवधि के लिए उदाहरण का उपयोग करने की आवश्यकता है। .............................. और दोस्तों कृपया इस प्रश्न में मेरी सहायता करें http://stackoverflow.com/questions/3766784/problem-in-updateating-datagridview-through-a-thread-when-scrolling –

13

यह एक रेस स्थिति इससे पहले कि आप यानी वस्तु को प्रारंभ Watin समय समाप्ति बढ़ाने की कोशिश हो सकती है।

इस तरह:

Settings.AttachToBrowserTimeOut = 240; 
    Settings.WaitUntilExistsTimeOut = 240; 
    Settings.WaitForCompleteTimeOut = 240;    
3

मैं ब्राउज़र को संलग्न करने के लिए इस वर्ग का उपयोग करें। और यह ठीक काम करता है।

public class StaticIE : IDisposable 
{ 
    private IE _ie; 
    private int _ieThread; 
    private string _ieHwnd; 
    private int _processId; 

    public StaticIE(IE aBrowser) 
    { 
     SetBrowser(aBrowser); 
    } 

    public IE Browser 
    { 
     get 
     { 
      var currentThreadId = GetCurrentThreadId(); 
      _ie = Browser.AttachTo<IE>(Find.By("hwnd", _ieHwnd), 1); 
      if (currentThreadId != _ieThread) 
      { 
       _ieThread = currentThreadId; 
      } 
      return _ie; 
     } 
    } 

    private void SetBrowser(IE aBrowser) 
    { 
     _ie = aBrowser; 
     _ieHwnd = _ie.hWnd.ToString(); 
     _ieThread = GetCurrentThreadId(); 
     _processId = _ie.ProcessID; 
    } 

    private int GetCurrentThreadId() 
    { 
     return Thread.CurrentThread.GetHashCode(); 
    } 

    public void Dispose() 
    { 
     if (_ie != null) 
     { 
      Process.GetProcessById(_processId).Kill(); 
      _ie = null; 
     } 
    } 
} 
1
Process[] processes = Process.GetProcessesByName("iexplore"); 

     foreach (Process process in processes) 
     { 
      process.Kill(); 
     } 

ऊपर कोड मेरी समस्या हल है। बस प्रत्येक रन पर आईई को मारता है, इसके कारण यह अभी भी चल रहा है।

+0

+1, मेरे लिए काम करता है। बल्कि "iexplorer" के बजाय "iexplore" को मारें :-) –

+0

opps, निश्चित, यह इंगित करने के लिए धन्यवाद कि वर्तनी गलती>>< – scott

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