hm ok, ich versuchs nochmal zu erklären was genau mein problem ist:
also ich bin dabei ein tool zu schreiben, welches meine webseite automatisch testen soll (damit ich das nicht immer händisch alles durchklicken muss)
das problem ist, das ich einige seiten habe in denen JScript (onklick) mehtoden ausgeführt werden, die felder automatisch befüllen (wodurch die seite neugeladen wird)
so, da nun aber der webbrowser erst zu laden beginnt wenn zb. mein button klick event Fertig ist (da diese im selben thread laufen) kann ich mit einmal klicken nicht mehere abläufe durchführen.
folgendes szenario:
1) ich trage die URL in eine textbox und klicke eine button, danach logge ich mich ein.
2) dan will ich nocheinmal einen button klicken und das tool soll aufgrund gewisser parameter die ich lade einen link auf der seite finden
3) diesen klicken und die neue seite laden
4) daten eintragen und einen button klicken der ein JScript (onclick event) auslöst und die seite wieder neugeladen wird mit den daten die ich eingetragen habe + die durch das JScript eingetragen werden
5) ich trage weitere daten ein und klicke einen Button (Submit)
6) seite wird weitergeleitet und ich frage die neu geladene seite auf einen error string ab
da es wie bereits gesagt das problem gibt wenn ich zb.:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| private void button1_Click(object sender, EventArgs e) { webBrowser1.Navigate(textBox1.Text);
} |
jetzt wird das
webBrowser1.Navigate(textBox1.Text); erst dan gestartet sobald ich aus der
button1_Click draussen bin.
da hatte ich die idee das ich das über einen zweiten Thread lösen kann der folgendes bewirkt:
1) er gibt die benötigten parameter an den Webbrowser und wartet dann bis er Brwoser fertig ist und macht weiter
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { CheckForIllegalCrossThreadCalls = false; webBrowser1.Document.Forms[0].GetElementsByTagName("Input").GetElementsByName("feldname")[0].InnerText = "1234567"; HtmlElement abc = webBrowser1.Document.All["JScript Button mit oncklick methode"]; object obj = abc.DomElement; System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click"); while (webBrowser1.IsBusy) { } webBrowser1.Document.Forms[0].GetElementsByTagName("Input").GetElementsByName("feldname n")[0].InnerText = "abcde"; } |
somit habe ich mir erhofft, das ich eine eingabe machen kann, und dan warten kann bis der Webbrowser die seite geladen hat und weitere eingaben akzeptieren kann ohne das ich händisch weitere buttons usw klicken muss.
danke aufjenden fall schon mal fürs nachdenken und für deine antwort oben. Ich hoffe das erklärt jetzt verständlich was ich versuche!