WebBrowser_DocumentCompleted()
事件有时似乎不是很充分,对我来说就是这样。我正在创建几个用于自动化检查的报告网页(目前为5个),此事件很快就会为每个网页运行一次。如果页面还没有完成,我想知道让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
}
您不能"回放"文档完成事件。感觉你的页面实际上是在使用一些JavaScript进行渲染,当浏览器加载完HTML/scripts/images时,从你的角度来看并不是真正的"完整"。这在现代页面中很常见。
在这种情况下,定期检查页面上的内容(即类似于您已经进行的检查)可能是最简单的选择。