我正在使用 Selenium 和 MSTest 作为框架,我想扩展TestClass
,TestMethod
和TestCleanup
. 现在测试是从一个TestBase
定义如下的类派生的:
[TestClass]
public class TestBase : IDisposable
{
bool disposed = false;
SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
public TestContext TestContext { get; set; }
protected HelperSelenium SeleniumHelper { get; set; }
[TestInitialize]
public void TestInitBase()
{
SeleniumHelper = new HelperSelenium(TestContext);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
handle.Dispose();
SeleniumHelper.GetWebDriver().Quit();
// Free any other managed objects here.
//
}
disposed = true;
}
}
[TestClass]
实例化和TestContext
实例[TestInitialize]
化 HelperSeleniumTestContext
作为参数(这对于告诉 Selenium 它应该根据TestContext
属性使用哪个类是必要的。
我试过这段代码没有成功:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class SeleniumTestClass : TestClassAttribute
{
//Prueba para finalizacion de recursos
bool disposed = false;
/// <summary>
/// Bandera para saber si se ha llamado a dispose e instanciacion de un Selfhandle
/// </summary>
SafeHandle handle = new SafeFileHandle(IntPtr.Zero, true);
public TestContext TestContext { get; set; }
public HelperSelenium SeleniumHelper { get; set; }
#region Configuración Test
[TestInitialize]
public void TestInitBase()
{
SeleniumHelper = new HelperSelenium(TestContext);
}
public void Dispose()
{
//SeleniumHelper.GetWebDriver().Quit();
//SeleniumHelper.GetWebDriver().Dispose();
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
handle.Dispose();
SeleniumHelper.GetWebDriver().Quit();
// Free any other managed objects here.
//
}
disposed = true;
}
我想扩展[TestClass]
到[SeleniumTestClass]
所以如果我[SeleniumTestClass]
在派生类中使用所有这些都将自动完成。我正在尝试这样做,因为我们正在使用即使在循环EventFiringWebDriver
内也会抛出异常。Wait.Until
Selenium 可以通过两种方式抛出异常:
- 执行了引发异常的操作,但异常被
Wait.Until
- 执行了引发异常的操作,并且异常在
Wait.Until
因此,如果 TestMethod 失败,我将能够在捕获异常时截取屏幕截图。我认为TestCleanup
不能被继承,所以我不确定我是否能够在TestCleanup
我知道我可以将TestMethod
和TestCleanup
每个都包含在一个中,try-catch
但是在我们拥有的每个测试以及我们将来要创建的测试中这样做会很麻烦。
任何帮助表示赞赏。