WebBrowser_DocumentCompleted()
イベントは時にはあまり適切ではないようで、私にとってはこれが当てはまりました。私は自動化チェックのためのいくつかのレポートWebページを作成しています(現在は5)、このイベントはこれらのページごとに1回、すぐに実行されます。ページが完成していない場合は、DocumentCompleted()
を実行し続けるのが最善の方法であると思います。別のWebブラウザーを作成するDocumentCompleted()
私はautomationExec()
機能でReadyStateとURLが一致するかどうかを確認しようとしましたが、これは無駄です。ReadyStateは完全であり、URLは一致しています。これは問題ではありませんが、ページ上にフッタタグの存在を確認するだけでよいので、ReadyState
とWebBrowserDocumentCompletedEventArgs.Url
を対象にする必要はありません。
private void openReport(UnitTestType unitTest)
{
BrowserPopup testBrowser = new BrowserPopup();
WebBrowser reportBrowser = new WebBrowser();
...
reportBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(automationExec);
testBrowser.CreateWindow(reportBrowser, "QA Automation", unitTest.hash); //creates browser window
}
private void automationExec(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser reportBrowser = (WebBrowser)sender;
//footer, version tag
if (reportBrowser.Document.Body.FirstChild.NextSibling.NextSibling.FirstChild.FirstChild.FirstChild.NextSibling == null)
{
reportBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(automationExec);
//i'm not sure how to re-raise DocumentCompleted event now that it has occured
return;
}
//report is complete, perform automation tests
}
"イベントはあまり適切ではありません"問題の非常に明確な説明ではありません。コンテンツを非同期的にレンダリングするページで問題が発生していますか(「ドキュメントが完成した後のいつか」など) –
問題は、ページが完了する前にDocumentCompleted()イベントが実行されることです。ページを完全に完成させる必要があります。または、XHTMLで自動テストを実行するとデータが失われます。私は、DocumentCompleted()イベントがフレームごとに1回実行されるか、他の技術がJavaScriptのように関わっているときに実行される可能性があると聞いています。そして、私はこれらのレポートページにJavaScriptがあります。私はDocumentCompleted()をまっすぐなHTMLで試していません。その場合、ページが実際に終了するまで実行するのを待っています。 – CraigElf
ここではJavascriptが問題です。DocumentCompletedイベントが発生した後*実行されます。それが何をしているのか、それが「完全」なのかを知る方法はありません。ほとんどの場合、実際には完了していないため、DOMイベントのために追加のJSが実行されます。タイマーでポーリングするだけで、DOMの変更を監視できます。 –