我有一个单元测试代码,需要在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
DocumentComplete
事件到达时打开一个模式对话框。关闭对话框将结束应用程序。现在,所有功能都适用于:
DocumentComplete
BrowserTest.exe
BrowserTest.exe live
但是,运行BrowserTest.exe google
永远不会打开模式对话框。因此,代码一定有问题,但是呢?