我正在使用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]
实例化HelperSelenium并使用TestContext
作为参数(这是必须告知Selenium取决于{{ 1}}属性。
我尝试使用此代码未成功:
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
Wait.Until
因此,如果TestMethod失败,我将能够在捕获异常的同时截取屏幕截图。我认为Wait.Until
无法继承,因此我不确定是否能够在TestCleanup
我知道我可以将TestCleanup
和TestMethod
分别包装在TestCleanup
中,但是在我们拥有的每个测试以及将要创建的测试中,这样做都会很麻烦将来。
感谢您的帮助。
答案 0 :(得分:1)
尝试让抽象类调用新的OnTest方法:
[TestClass]
public abstract class TestBase
{
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 abstract void OnTest();
[TestMethod()]
public void SeleniumTest()
{
try
{
OnTest();
}
catch(Exception ex){
}
}
}