2010-11-19 24 views
2

'a eklerken sorun UI testimiz için WatiN denemeyi deniyorum, testlerim işe yarayabilir, ancak IE'yi sonradan kapatamıyorum.WatiN'yi IE

WatiN'in örnek IEStaticInstanceHelper technique örneğini kullanarak sınıf temizlemede IE'yi kapatmaya çalışıyorum.

sorun hangi zaman aşımına IE iplik takılarak gibi görünüyor: (. _ieHwnd IE ilk başlatıldığında saklanan IE için kolu olan)

_instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd)); 

Bu hata veriyor

:

Class Cleanup method Class1.MyClassCleanup failed. Error Message: WatiN.Core.Exceptions.BrowserNotFoundException: Could not find an IE window matching constraint: Attribute 'hwnd' equals '1576084'. Search expired after '30' seconds.. Stack Trace: at WatiN.Core.Native.InternetExplorer.AttachToIeHelper.Find(Constraint findBy, Int32 timeout, Boolean waitForComplete)

Eminim ki açık bir şey eksik olmalıyım, bunun hakkında bir fikri olan var mı? Teşekkür

Bütünlüğü için

, statik yardımcı şuna benzer: IE nesne yok edilir, varsayılan olarak

private static StaticBrowser _staticBrowser; 

[ClassCleanup] 
public static void MyClassCleanup() 
{ 
    _staticBrowser.Instance.Close(); 
    _staticBrowser = null; 
} 

cevap

0

Bunun yerine mstest dökerek ve mbunit kullanarak sabitleyin. Ayrıca, herhangi bir IEStaticInstanceHelper malzemesini kullanmam gerektiğini de öğrendim, sadece işe yaradı.

+0

Aynı sorunla karşılaşıyorum, ama ne MSTest ne de MbUnit kullanıyorum. Ortamınızda başka herhangi bir şey mi değişmiş olabilir? –

+0

Testlerin iş parçacığı yapma şeklini bozduğunu düşünüyorum, bu çeşitli ayarları açıklıyor; http://watin.sourceforge.net/apartmentstateinfo.html Ayarladığım yol, FixtureSetUp aracılığıyla sayfa performans eylemlerine vs. gidiyorum, daha sonra FixtureTearDown'da tarayıcıyı kapatıyorum. WatiN diğer konfigürasyonlarla iyi oynamadı. –

0

, onlar kendkapat:

public class StaticBrowser 
{ 
    private IE _instance; 
    private int _ieThread; 
    private string _ieHwnd; 

    public IE Instance 
    { 
     get 
     { 
      var currentThreadId = GetCurrentThreadId(); 
      if (currentThreadId != _ieThread) 
      { 
       _instance = IE.AttachTo<IE>(Find.By("hwnd", _ieHwnd)); 
       _ieThread = currentThreadId; 
      } 
      return _instance; 
     } 
     set 
     { 
      _instance = value; 
      _ieHwnd = _instance.hWnd.ToString(); 
      _ieThread = GetCurrentThreadId(); 
     } 
    } 

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

Ve temizlemek kod şuna benzer tarayıcı.

CleanUp kodunuz zaten kapalı olan bir tarayıcı bulmaya çalışabilir, bu yüzden bir hatayla karşılaşabilirsiniz.

+0

Cevabınız için teşekkürler, ancak ne yazık ki benim sorunum tarayıcı açık kalıyor olmasıdır –

1

Sorun, MSTEST yöntemi [ClassCleanup] özniteliği ile çalıştırdığında, STA'un parçası olmayan bir iş parçacığında çalıştırılacağıdır. Aşağıdaki kodu çalıştırırsanız

çalışması gerekir:

[ClassCleanup] 
public static void MyClassCleanup() 
{ 
    var thread = new Thread(() => 
    { 
     _staticBrowser.Instance.Close(); 
     _staticBrowser = null; 
    }); 

    thread.SetApartmentState(ApartmentState.STA); 
    thread.Start(); 
    thread.Join(); 
} 

watin web sitesi kısaca watin değil STA here yılında parçacığı işe yaramaz bahseder ama bariz olmadığını [TestMethod] 'ın çalışma STA'da [ClassCleanup] ve [AssemblyCleanupAttribute] gibi yöntemler kullanılmaz.