看来,WebBrowser_DocumentCompleted()
事件有时不够充分,对我而言,情况就是如此。我为自动化检查(目前为5)创建了多个报告网页,并且对于这些页面中的每个页面,此事件很快就会运行一次。如果页面没有完成,我想知道最好的方法是让DocumentCompleted()
继续运行。筹集另一个WebBrowser DocumentCompleted()
我试过检查ReadyState和URL以查看它们是否与我的automationExec()
函数匹配,并且这没用,ReadyState是Complete并且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()事件对每一帧都执行一次,或者在JavaScript等其他技术涉及时执行。在我正在使用的这些报告页面上有JavaScript ...我没有用直接的HTML尝试过DocumentCompleted(),也没有其他的东西,也许它在这种情况下正常工作,等待执行,直到页面实际完成。 – CraigElf
Javascript是这里的问题,它在DocumentCompleted事件触发后运行*。没有办法找出它在做什么或什么时候“完成”。主要是因为它从来没有实际完成,所以额外的JS由于DOM事件而运行。您只能使用计时器进行轮询以观察DOM更改。 –