提升另一个WebBrowser DocumentCompleted()

时间:2012-01-25 22:42:36

标签: c# browser

有时似乎WebBrowser_DocumentCompleted()事件不是很充足,对我来说情况就是这样。我正在创建几个用于自动化检查的报告网页(目前为5个),并且这个事件很快就会运行一次,每个页面都有。如果页面没有完成,我想知道让DocumentCompleted()继续运行的最佳方法是什么。

我已经尝试检查ReadyState和URL以查看它们是否与我的automationExec()函数匹配,而且这一点毫无价值,ReadyState已完成且网址匹配。这不是一个问题,但我可以检查页面上是否存在页脚标记,因此ReadyStateWebBrowserDocumentCompletedEventArgs.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
}    

1 个答案:

答案 0 :(得分:1)

您无法“重播”文档完整事件。感觉就像你的页面实际上使用了一些JavaScript进行渲染,并且当浏览器加载HTML /脚本/图像时,从你的角度来看并不是真正的“完整”。这在现代页面中很常见。

在这种情况下,定期检查您希望在页面上显示的内容(即类似于您已经拥有的内容)可能是最简单的选项。