我有一个测试方法,需要在测试期间多次打开和关闭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();
}
答案 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,调整窗口大小等功能。