J'ai un certain nombre de tests qui semblent échouer de manière aléatoire en raison d'un dépassement de délai pendant l'exécution d'Internet Explorer.Expiration du délai pendant l'exécution d'Internet Explorer lors d'une erreur Browser.AttachTo
WatiN.Core.Exceptions.TimeoutException: Timeout while Internet Explorer busy
Ils erreurs semblent être seulement causé sur les lignes avec le code de:
WatiN.Core.Browser.AttachTo[T](Constraint constraint)
Ma méthode d'installation:
[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 est une variable globale au niveau de la classe:
IE _browser;
Ensuite, dans le test, j'effectue un certain nombre d'actions sur la fenêtre qui s'ouvre et l'une de ces actions est en cliquant sur un bouton et ce bouton ouvre un nouvel onglet dans l'application. ensuite pour obtenir une référence à cette nouvelle page J'utilise les lignes:
Thread.Sleep(6000); //even sleeping but to no avail
Browser workItem = Browser.AttachTo<IE>(Find.ByTitle(new Regex(workItemRegex)));
Cela semble rejeter au hasard des erreurs, parfois ça marche et parfois je reçois une erreur.
Je ne suis pas exactement sûr de ce qui ne va pas ici, car il semble logique que cela fonctionne.
Dans le TearDown du test, tous les processus IE sont supprimés et _browser est défini sur null.
Des idées?
J'ai résolu ce problème en utilisant une combinaison de AttachToNoWait et Thread.Sleep (XXXX). J'ai également essayé de structurer mes tests différemment en ce que je passe la fenêtre courante sur laquelle je travaille à des méthodes auxiliaires au lieu de créer une référence à la page spécifique dans le cadre des méthodes auxiliaires. J'accepterai votre réponse car, d'après mon expérience, c'est exactement ce qui cause le problème. Ce ne sont que quelques trucs de travail que j'ai utilisés. –
Ben
J'ai été là avant et j'ai utilisé une instance et la déplacer entre les classes mais j'ai aussi trouvé des situations où il n'y avait pas d'autre alternative que de lancer une autre instance et de s'y attacher, puis de tuer cette instance et re instaurez et dans ce cas, tuer le processus fonctionne très bien. – ProgrammerV5