У меня есть код модульного теста, который должен открыть страницу в 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 . Закрытие диалогового окна завершает приложение.
Теперь все отлично работает для:
- Управление веб-браузером для www.ceridian.com -
BrowserTest.exe
- IE окно для www.live.com -
BrowserTest.exe live
- IE окно для www.google.com -
BrowserTest.exe google
Но выполнение BrowserTest.exe ceridian
никогда не открывает модальное диалоговое окно. Итак, что-то должно быть не так с кодом, но что ???