C# 如何在MSTest中附加测试失败的屏幕截图?

C# 如何在MSTest中附加测试失败的屏幕截图?,c#,selenium,visual-studio-2015,mstest,C#,Selenium,Visual Studio 2015,Mstest,如果测试执行失败,我无法设置将屏幕截图附加到TestResult的正确方法 该框架是使用Visual Studio 2015 Selenium v3.141.0建立的 在此过程中,我尝试将其作为参数传递给EventFiringWebDriver,以便能够附加一个带有 但是,我不喜欢传递TestContext,因为该框架分为包含所有页面对象的Selenium程序集和包含所有测试用例的测试程序集 TestBase.cs [测试初始化] public void TestInitBase() { Sel

如果测试执行失败,我无法设置将屏幕截图附加到TestResult的正确方法

该框架是使用Visual Studio 2015 Selenium v3.141.0建立的

在此过程中,我尝试将其作为参数传递给EventFiringWebDriver,以便能够附加一个带有

但是,我不喜欢传递TestContext,因为该框架分为包含所有页面对象的Selenium程序集和包含所有测试用例的测试程序集

TestBase.cs

[测试初始化]
public void TestInitBase()
{
SeleniumHelper=新助手Selenium(TestContext);
}

HelperSelenium.cs

public HelperSelenium(TestContext-TestContext)
{
Id=int.Parse(testContext.Properties[“colegio”].ToString());
WebDriver=新的WebDriverSelector(testContext);
...
}

WebDriverSelector.cs

公共WebDriverSelector(TestContext tc)
{
testContext=tc;
...
var firingWebDriver=新的事件监听器(remoteDriver,testContext).GetWebDriver();
...

EventListeners.cs

公共事件监听器(IWebDriver驱动程序、TestContext TestContext) { ... 私有静态void上传屏幕截图() { 屏幕截图ss=c.GetScreenshot(); 字符串路径=目录。GetCurrentDirectory()+“\\”+ TestContext.TestName+“\u1”+ contador+“.png”; SaveAsFile(路径,ScreenshotImageFormat.Png); TestContext.AddResultFile(路径); }
我想跳过将TestContext从一个类传递到另一个类,但是我想不出一种实际实现它的方法。最佳实践是用事件侦听器包装驱动程序,并用自己的屏幕截图捕捉器覆盖OneException方法。 通过这种方式,它将在任何地方识别异常,并在无需额外维护的情况下自动拍摄屏幕截图

@Override
public void onException(Throwable throwable, WebDriver driver) {
    try
    {
        /* Take screenshot when exception happened. */
        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        /* save screenshot to file. */
        FileUtils.copyFile(scrFile, new File("C:\\Workspace\\webdriverEventListenerScreenshot.png"));
    }catch(IOException ex)
    {
        ex.printStackTrace();
    }
}
参考资料:

编辑:
您可以使用(trace.WriteLine(“path”)将路径添加到测试结果/将其写入跟踪

Hello@OriBr,谢谢您的输入。我可以这样做,但这仍然不能解决我主要关心的问题,即必须通过TestContext才能在EventListener中使用TestContext.AddResultFile。每次截图时,您都可以将文件的路径保存在全局变量中。获得此路径后,您可以访问从TestCleanUp中删除并添加它。不要忘记使用Guid对象生成唯一路径