我刚刚开始使用Selenium - 目前我只对IE感兴趣,因为它是一个内部网站点而不是公共消费。我正在使用IEDriverServer.exe
来设置我的浏览器会话,但我不确定是否需要为每个测试重新创建它,或者它是否会自动维护浏览器会话/测试的原子性。我无法找到任何相关信息,因为大多数示例都是针对单个测试而不是一批单元测试。
所以目前我有
[TestInitialize]
public void SetUp()
{
_driver = new InternetExplorerDriver();
}
和
[TestCleanup]
public void TearDown()
{
_driver.Close();
_driver.Quit();
}
这是正确的还是我为每项测试做了额外的不必要的工作?我是否应该在声明时初始化它?如果是这样,我该如何管理其生命周期?我认为我可以为每个测试调用.Close()
来终止浏览器窗口,但.Quit()
呢?
答案 0 :(得分:1)
我将Selenium与NUnit一起使用,但您不需要每次都重新创建它。既然您正在使用MSTest,我会这样做:
[ClassInitialize]
public void SetUp()
{
_driver = new InternetExplorerDriver();
}
[ClassCleanup]
public void TearDown()
{
_driver.Close();
_driver.Quit();
}
每个测试类初始化时, ClassInitialize
将调用一次代码,ClassCleanup
将在每个测试类拆除/处置时调用一次代码。
虽然这仍然无法保证,因为测试运行器可能会进行多个测试线程:
http://blogs.msdn.com/b/nnaderi/archive/2007/02/17/explaining-execution-order.aspx
您还必须考虑每次要开始测试的状态。每次关闭和启动新浏览器会话的最常见原因是您可以使用干净的平板。
有时这是不必要的工作,正如你所指出的那样,但你的测试起点是什么?
对我来说,每个测试类都有一个浏览器,其中有一种方法可以退出我的Web应用程序,并在每次测试结束时保持在登录页面。