Как ждать события SHDocVw InternetExplorerClass.DocumentComplete в модульном тесте C#?
У меня есть код модульного теста, который должен открыть страницу в IE и сделать что-то после завершения документа. Страница содержит перенаправления и в конце загружает Silverlight (мы застряли с ним еще на год).
Вот код:
using System;
using System.Threading;
using System.Windows.Forms;
using Common;
using NUnit.Framework;
using SHDocVw;
namespace Web
{
partial class ForEachWebServer
{
private class IEEvent
{
public object Url;
public void OnDocumentComplete(object pDisp, ref object URL)
{
Url = URL;
}
}
[Test, Category("non-ui"), Category("xap")]
[SkipTestExecutionForServicesBinding]
public void XAPDownload()
{
var ieEvent = new IEEvent();
var ie = new InternetExplorerClass();
ie.DocumentComplete += ieEvent.OnDocumentComplete;
ie.Visible = true;
ie.Navigate("ceridian.com");
while (ieEvent.Url == null)
{
Application.DoEvents();
Thread.Sleep(50);
}
Console.WriteLine($"Navigation complete: {ieEvent.Url}");
}
}
}
Но ieEvent.Url
остатки null
навсегда. Также, если я пытаюсь получить доступ ie.Busy
в какой-то момент, ожидая окончания цикла, я получаю следующее:
System.Runtime.InteropServices.COMException: 'The object invoked has disconnected from its clients. (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))'
Что я делаю неправильно?
РЕДАКТИРОВАТЬ 1
У меня есть полностью функциональный проект здесь - https://dev.azure.com/MarkKharitonov0271/_git/BrowserTest
- При запуске без каких-либо параметров он открывает элемент управления Windows Forms WebBrowser, переходит на сайт www.ceridian.com и открывает модальное диалоговое окно, когда
DocumentComplete
событие прибывает для ceridian. Закрытие диалогового окна завершает приложение. - При запуске с одним аргументом командной строки, скажем, X, он открывает браузер IE с помощью COM-объекта InternetExplorer, переходит на http://www.x.com/ и открывает модальное диалоговое окно, когда
DocumentComplete
событие прибывает для X. Закрытие диалогового окна завершает приложение.
Теперь все отлично работает для:
- Элемент управления WebBrowser для www.ceridian.com -
BrowserTest.exe
- IE окно для www.live.com -
BrowserTest.exe live
- IE окно для www.google.com -
BrowserTest.exe google
Но работает BrowserTest.exe ceridian
никогда не открывает модальное диалоговое окно. Итак, что-то должно быть не так с кодом, но что???