Похоже, что событие 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 на этих страницах отчета, с которыми я работаю ... Я не пробовал DocumentCompleted() с прямым HTML и ничего другого, возможно, он работает правильно в этом случае, ожидая выполнения до тех пор, пока страница не будет закончена. – CraigElf
Javascript - проблема здесь, она запускается * после того, как срабатывает событие DocumentCompleted. Нет способа узнать, что он делает или когда он «завершен». В основном потому, что он никогда не завершен, дополнительные JS запускаются из-за событий DOM. Вы можете только опросить таймер, чтобы наблюдать изменения DOM. –