У меня есть несколько тестов, которые кажутся случайным сбоем из-за таймаута при ошибке занятости в Internet Explorer.Тайм-аут при ошибке занятости в Internet Explorer, когда Browser.AttachTo
WatiN.Core.Exceptions.TimeoutException: Timeout while Internet Explorer busy
Они ошибки, как представляется, вызваны только на линиях с кодом:
WatiN.Core.Browser.AttachTo[T](Constraint constraint)
Мой метод установки:
[SetUp]
[Timeout(1000)]
public void WithAnInstanceOfTheBrowser()
{
Settings.AttachToBrowserTimeOut = 200;
Settings.WaitUntilExistsTimeOut = 200;
Settings.WaitForCompleteTimeOut = 200;
Settings.SleepTime = 60;
BrowserExtension.KillAllIEProcess();
var securePassword = new SecureString();
foreach (var c in UserConfig.GetConfigPassword())
{
securePassword.AppendChar(c);
}
string address = UserConfig.GetConfigUrl();
string username = UserConfig.GetConfigUserName();
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Internet Explorer\iexplore.exe", address);
startInfo.UserName = username;
startInfo.Password = securePassword;
startInfo.UseShellExecute = false;
startInfo.LoadUserProfile = true;
Process.Start(startInfo);
_browser = Browser.AttachTo<IE>(Find.ByUrl(UserConfig.GetConfigUrl()));
}
_browser глобальная переменная на уровне класса:
IE _browser;
Затем в тесте я выполняю ряд действий в открывшемся окне, и одно из этих действий нажимает кнопку, и эта кнопка открывает новую вкладку в приложении. Затем, чтобы получить ссылку на эту новую страницу я использую следующие строки:
Thread.Sleep(6000); //even sleeping but to no avail
Browser workItem = Browser.AttachTo<IE>(Find.ByTitle(new Regex(workItemRegex)));
Это кажется откидывать ошибки случайным образом, иногда это работает, и иногда я получаю сообщение об ошибке.
Я не совсем уверен, что здесь происходит неправильно, потому что кажется логичным, что это должно сработать.
В TearDown теста все процессы IE убиты, а значение _browser равно null.
Любые идеи?
Я пробовал эту проблему, используя комбинацию AttachToNoWait и Thread.Sleep (XXXX). Я также пытался структурировать свои тесты по-разному в том, что передаю текущее окно, в котором я работаю, для вспомогательных методов вместо создания ссылки на конкретную страницу как часть вспомогательных методов. Я согласен с вашим ответом, так как в моем опыте именно это и вызывает проблему. Это всего лишь некоторые работы, которые я использовал. –
Ben
Я был там раньше, и я использовал один экземпляр и перемещал его между классами, но я также нашел ситуации, когда альтернативы нет, кроме запуска другого экземпляра и прикрепления к нему, instatiate и в этом случае убийство процесса отлично работает. – ProgrammerV5