进程CloseMainWindow()函数不起作用

时间:2012-08-30 16:45:16

标签: coded-ui-tests

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

  

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

然后关闭它:

  

process.CloseMainWindow();

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

一旦我关闭了这个过程,我就会重新启动Internet Explorer。例如

  

process = 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();
}

2 个答案:

答案 0 :(得分:1)

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

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

    process.Start(.....);

    process.CloseMainWindow();
}

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

答案 1 :(得分:0)

我找到了一个解决方案,但它只适用于那些有权访问Coded UI测试DLL的人(我认为它与Visual Studio Ultimate和Premium一起提供)。 因此,我将更改问题上的标签。

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

  

使用Microsoft.VisualStudio.TestTools.UITesting;

创建浏览器窗口:

  

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

关闭:

  

Browser.Close();

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

相关问题