J'essaie de naviguer vers une page avec un navigateur caché depuis une application C#, cliquez sur un lien et vérifiez le clic. Débit: - accédez à "http: // mypage" - cliquer sur un lien, le code HTML lien (appelle un CallBack ComponentArt):Gestion de C# WebBrowser lors du déclenchement d'un clic/événement ComponentArt CallBack
<div id="ctl00_ctl00_PlaceHolderMain_Colleague1_linkAdd" onclick="colleagueCallback.callback('SOMENAME'); return false;">
Ajouter collègue - attendre le clic obtenir le résultat et mettre à jour la page - vérifier le clic a travaillé
Mon problème: le clic ne semble pas entièrement terminée, à moins que j'appelle le WebBroser.Print() (que je ne ai pas besoin, vient d'essayer un million façons de comprendre ce qui se passe après le clic, seul Print est en train de faire le clic complet).
Le code, qui fonctionne parfaitement, navigue fonctionne, il peut trouver les tags que je recherche, l'événement click est en train de se déclencher (j'obtiens un changement intermédiaire), mais le callback ne se termine pas, comme il s'avère uniquement à l'aide de WebBrowser.Print(), tous les autres WebBrowser.Invalidate(), WebBrowser.Update(), WebBrowser.DocumentStream.Flush() ou WebBroser.ResumeLayout() ne finaliseront pas le rappel ASP dans la page ... :
tempIE = new WebBrowser(); tempIE.Navigate("http://mypage"); while (tempIE.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } tempIE.AllowNavigation = true; HtmlElement addDivTag = tempIE.Document.GetElementById("ctl00_ctl00_PlaceHolderMain_Colleague1_linkAdd"); if (addDivTag == null) throw (new Exception("Session.FollowPerson: could not find the Add tag")); if (addDivTag.FirstChild == null) throw (new Exception("Session.FollowPerson: could not find the add link")); addDivTag.FirstChild.InvokeMember("click"); while (tempIE.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
Après cela, je suis vérifiais si l'une des balises a été modifié par le rappel du serveur ComponentArt mais seulement obtenir l'étiquette intermédiaire. Le changement que je suis suivi est:
<a href="javascript:void(0)">Add colleague</a>
changera intermédiaire à (tout en faisant la logique d'ajouter dans le callback):
<img src="/images/loading.gif">
à la fin devrait changer pour:
<br>Is your colleague</br>
Quelqu'un sait ce qu'il se passe dans le WebBroser.Print() qui fait que la page complète le callback?
Je pensais déjà que le ReadyState ne fonctionnerait pas parfaitement et a ajouté un très gros délai (Thread.Sleep (50000)). Lorsque je fais le même flux à partir de IE manuellement, il en faut beaucoup moins pour que le clic se termine.Ont également ajouté le gestionnaire d'événement DocumentCompleted, qui se déclenche mais le clic n'est toujours pas terminé (une vue séparée de la page montre que l'action n'a pas abouti) – OliCS
Comme autre test, au lieu d'attendre, essayez d'accrocher l'événement Navigated. Quand vous le faites, est-ce qu'il tire? – Les
une chose que je peux dire, DocumentCompleted ne se déclenche pas après avoir cliqué sur le lien ... même lorsque j'utilise Print() pour forcer la validation. – OliCS