У моей команды есть набор тестовых наборов WatiN, которые автоматически запускаются нашим сервером TeamCity. Недавно мы переключили все наши агенты сборки на 64-битные, и я также переключил наши тесты WatiN на использование NUnit в режиме x64. Watin всегда давал нам нечастые тестовые сбои из-за неудачных вызовов Interop в браузер IE или по другим причинам, но они всегда были довольно редкими. Поскольку все переключается на 64-разрядную версию, почти каждый запуск любого из наших тестовых наборов дает сбой со следующим исключением:
Test(s) failed. System.InvalidCastException : Specified cast is not valid.
at SHDocVw.IWebBrowser2.get_HWND()
at WatiN.Core.Native.InternetExplorer.IEBrowser.get_hWnd()
at WatiN.Core.DomContainer.StartDialogWatcher()
at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri, IDialogHandler logonDialogHandler, Boolean createInNewProcess)
...
Я нашел связанный вопрос , где пользователь WatiN видит то же исключение, но это потому, что он пытается многопоточность. Мы не делаем ничего подобного, на самом деле мы используем правильную квартиру состояния потока, как это предлагается в документации WatiN. Я заметил в этом вопросе, что кто-то прокомментировал, что это может быть из-за режима x86 или x64.
Как можно избежать этой ошибки, приводящей к частым ошибкам моих тестов?
Если это просто вопрос возврата в 32-битный режим, я справлюсь с этим, но я хотел знать наверняка, что лучшего решения не существует. Благодаря.
UPDATE:
Оставив задания с использованием 64-битного NUnit runner для более 5 запусков тестовых наборов, они каждый раз терпели неудачу, за исключением одного раза с этой же ошибкой. Мы переключили их обратно на 32 бит и с тех пор провели более 10 успешных запусков. Я полагаю, что временное исправление - это использование 32-битного NUnit-бегуна, хотя я все еще ищу причину, по которой это происходит, или решение, которое позволило бы нам вернуться к x64.