2012-01-25 2 views
1

Похоже, что событие 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 
}  
+0

«Событие не очень адекватно» не очень ясное объяснение проблемы. Ваша проблема со страницами, что они отображают контент асинхронно (т. Е. «Когда-то после завершения документа»)? –

+0

Проблема заключается в том, что событие DocumentCompleted() выполняется до завершения страницы. Мне нужно, чтобы страница была полностью завершена, или данные отсутствуют, когда я запускаю свои автоматические тесты на XHTML. Я слышал, что событие DocumentCompleted() выполняется один раз для каждого фрейма, или оно может выполняться при использовании других технологий, таких как JavaScript. И есть JavaScript на этих страницах отчета, с которыми я работаю ... Я не пробовал DocumentCompleted() с прямым HTML и ничего другого, возможно, он работает правильно в этом случае, ожидая выполнения до тех пор, пока страница не будет закончена. – CraigElf

+0

Javascript - проблема здесь, она запускается * после того, как срабатывает событие DocumentCompleted. Нет способа узнать, что он делает или когда он «завершен». В основном потому, что он никогда не завершен, дополнительные JS запускаются из-за событий DOM. Вы можете только опросить таймер, чтобы наблюдать изменения DOM. –

ответ

1

Вы не можете завершить событие документа «replay». Похоже, что ваша страница на самом деле использует какой-то JavaScript для рендеринга и на самом деле не является «полной» с вашей точки зрения, когда браузер загружен HTML/скриптами/изображениями. Это довольно часто для современных страниц.

Периодически проверяя что-то, что вы ожидаете на странице (то есть, похоже, что у вас уже есть), может быть самым простым вариантом в этом случае.

+0

Спасибо за помощь. – CraigElf

Смежные вопросы