截取测试失败和异常的屏幕截图

你们中有谁知道针对测试失败和异常进行屏幕截图的可能解决方案?

我在其中添加了以下代码,TearDown()但结果是它也会对通过的测试进行截图,因此它不是最佳解决方案:

DateTime time = DateTime.Now;

string dateToday = "_date_" + time.ToString("yyyy-MM-dd") + "_time_" + time.ToString("HH-mm-ss");

Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot();

screenshot.SaveAsFile((settings.filePathForScreenShots + "Exception" + dateToday + ".png"), System.Drawing.Imaging.ImageFormat.Png);

我已经找到了这个主意:http: //yizeng.me/2014/02/08/take-a-screenshot-on-exception-with-

selenium-csharp-eventfiringwebdriver/,可以使用WebDriverExceptionEventArgs,但是由于某些原因,它使还有一些随机截图,没有任何合理的解释。

我发现的其他想法是针对Java而不是与Selenium一起使用的NUnit,因此它们几乎没有用。

回答:

如果将屏幕截图逻辑放入TearDown方法中,则无论测试成功与否,它将在每次测试完成后调用。

我使用一个具有包装测试并捕获所有异常的功能的基类。当测试失败时,将捕获异常并截取屏幕截图。

我在所有Selenium测试中都使用了这个基类,它看起来像这样:

public class PageTestBase

{

protected IWebDriver Driver;

protected void UITest(Action action)

{

try

{

action();

}

catch (Exception ex)

{

var screenshot = Driver.TakeScreenshot();

var filePath = "<some appropriate file path goes here>";

screenshot.SaveAsFile(filePath, ImageFormat.Png);

// This would be a good place to log the exception message and

// save together with the screenshot

throw;

}

}

}

测试类如下所示:

[TestFixture]

public class FooBarTests : PageTestBase

{

// Make sure to initialize the driver in the constructor or SetUp method,

// depending on your preferences

[Test]

public void Some_test_name_goes_here()

{

UITest(() =>

{

// Do your test steps here, including asserts etc.

// Any exceptions will be caught by the base class

// and screenshots will be taken

});

}

[TearDown]

public void TearDown()

{

// Close and dispose the driver

}

}

以上是 截取测试失败和异常的屏幕截图 的全部内容, 来源链接: utcz.com/qa/402445.html

回到顶部