2012-01-25 49 views
1

看来,WebBrowser_DocumentCompleted()事件有时不够充分,对我而言,情况就是如此。我为自动化检查(目前为5)创建了多个报告网页,并且对于这些页面中的每个页面,此事件很快就会运行一次。如果页面没有完成,我想知道最好的方法是让DocumentCompleted()继续运行。筹集另一个WebBrowser DocumentCompleted()

我试过检查ReadyState和URL以查看它们是否与我的automationExec()函数匹配,并且这没用,ReadyState是Complete并且URL匹配。这并不是问题,但我可以检查页面上是否存在页脚标记,因此不需要覆盖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 
}  
+0

“事件不是很充分”对问题的解释不是很清楚。您的页面是否存在异步呈现内容的问题(即“文档完成后的某个时间段”)? –

+0

问题是DocumentCompleted()事件在页面完成之前执行。当我在XHTML上运行我的自动化测试时,我需要完全完成页面,或者数据丢失。我听说DocumentCompleted()事件对每一帧都执行一次,或者在JavaScript等其他技术涉及时执行。在我正在使用的这些报告页面上有JavaScript ...我没有用直接的HTML尝试过DocumentCompleted(),也没有其他的东西,也许它在这种情况下正常工作,等待执行,直到页面实际完成。 – CraigElf

+0

Javascript是这里的问题,它在DocumentCompleted事件触发后运行*。没有办法找出它在做什么或什么时候“完成”。主要是因为它从来没有实际完成,所以额外的JS由于DOM事件而运行。您只能使用计时器进行轮询以观察DOM更改。 –

回答

1

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

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

+0

感谢您的帮助。 – CraigElf