1

我有一个测试方法,需要在测试期间多次打开和关闭 Internet Explorer。我一直在创建这样的过程:

进程进程 = Process.Start(...);

并像这样关闭它:

process.CloseMainWindow();

但是,我发现我只能调用一次该方法,否则会收到错误消息“进程已退出,因此请求的信息不可用”。

关闭进程后,我将重新启动 Internet Explorer。例如

进程 = Process.Start(...);

但这没有用。我还尝试在调用 Process.Start() 方法之前将 Process 变量清空,但这不起作用。

我也尝试使用 process.Kill(),但这也引起了问题。

这样做的正确方法是什么?

更新:代码

Process Browser;

[TestInitialize]
public void TestSetup()
{
    Browser = TestBase.LaunchBrowser();

    ...

    Browser.WaitForInputIdle();
    Browser.CloseMainWindow();

    Browser = null
    Browser = Process.Start("IExplore.exe", ...);
}

[TestMethod]
public void MyTest()
{
   // do things
   Browser.Kill();
   Browser = Process.Start("IExplore", "www.adifferentwebpage");
}

[TestCleanup]
public void TestCleanup
{
   Browser.Kill();
}
4

2 回答 2

1

我建议创建另一个进程而不重用相同的变量。将您的代码封装在 using 语句中以正确关闭和处置流程变量

using(Process process = new Process())
{
    // do you stuff 

    process.Start(.....);

    process.CloseMainWindow();
}

还要记住,调用 CloseMainWindow 并不能保证进程将关闭。它只发送一个关闭进程主窗口的请求。如果应用程序在退出前要求用户确认,它可以拒绝退出。

于 2012-08-30T17:02:30.803 回答
0

我找到了一个解决方案,但它只适用于那些有权访问编码 UI 测试 DLL(我相信 Visual Studio Ultimate 和 Premium 附带)的人。因此,我将更改问题的标签。

如果您创建 Coded UI 测试项目,这些 DLL 引用将已经存在,但您需要的是这个 using 引用:

使用 Microsoft.VisualStudio.TestTools.UITesting;

创建浏览器窗口:

BrowserWindow browser = BrowserWindow.Launch(new System.Uri("www.whatever.com"));

关闭:

Browser.Close();

无论我需要重新启动浏览器多少次,这都有效。此 API 还包括许多其他方便的功能,例如删除 cookie、更改当前浏览器的 URL、调整窗口大小等。

于 2012-08-31T09:54:14.400 回答