2010-11-19 2 views
2

Я экспериментирую с WatiN для нашего тестирования пользовательского интерфейса, я могу получить тесты на работу, но я не могу заставить IE закрыться после этого.Проблема с WatiN to IE

Я пытаюсь закрыть IE в своем классе для очистки кода, используя пример WatiN IEStaticInstanceHelper technique.

Проблема, кажется, прикрепление к нити IE, который раз из: (. _ieHwnd является дескриптор IE сохраняется, когда IE запускается первый раз)

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

Это дает ошибку:

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)

Уверен, что я должен упустить что-то очевидное, есть ли у кого-нибудь идеи об этом? Благодаря

Для полноты, статический помощник выглядит следующим образом:

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(); 
} 
    } 

И чистый вверх код выглядит следующим образом:

private static StaticBrowser _staticBrowser; 

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

ответ

0

Исправлено это сам путем сброса mstest и использования mbunit. Я также обнаружил, что мне не нужно было использовать какой-либо материал IEStaticInstanceHelper, он просто сработал.

+0

У меня проблема с тем же, но я не использую ни MSTest, ни MbUnit. Что-нибудь еще в вашей среде изменилось, что, возможно, решило это? –

+0

Я думаю, что дело доходит до того, как тесты выполняют потоки, это описывает различные настройки; http://watin.sourceforge.net/apartmentstateinfo.html Как я его изложил, я перехожу к действиям на странице и т.д. через FixtureSetUp, а затем закрыл браузер в FixtureTearDown. WatiN не играла хорошо с другими конфигурациями. –

0

По умолчанию, когда объект IE уничтожаются, они закрываться автоматически браузер.

Ваш код CleanUp может попытаться найти браузер, который уже закрыт, поэтому у вас есть ошибка.

+0

Спасибо за ваш ответ, но, к сожалению, моя проблема в том, что браузер остается открытым –

1

Проблема заключается в том, что когда MSTEST выполняет метод с атрибутом [ClassCleanup], он будет запускаться в потоке, который не является частью STA.

Если запустить следующий код, он должен работать:

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

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

Сайт WatiN кратко упоминает, что WatiN не будет работать с потоками не в ГНА here но это не очевидно, что запуск [TestMethod] «s в STA, тогда как методы, подобные [ClassCleanup] и [AssemblyCleanupAttribute], нет.

Смежные вопросы