当前位置: 首页 > 面试题库 >

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

濮阳茂材
2023-03-14
问题内容

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

我在其中添加了以下代码,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
    }
}


 类似资料:
  • 问题内容: 如何在Selenium + Python中捕获失败的测试用例的屏幕截图?我可以获取页面的屏幕截图,但是在捕获失败的测试用例的屏幕截图时会遇到困难。 码: 问题答案: 您可以像这样: 希望对您有帮助!

  • 我正在使用MSpec使用硒网络驱动程序驱动一些自动化的用户界面测试。很像我在网上找到的例子。当测试失败时,我很难让它截图。 我在另一个问题上看到了一个评论,因为他们在示例Web规范中有一个。然而,在最新版本的Mspec(0.9.1)中似乎不存在。 在最新版本的mspec中,有没有其他方法可以做到这一点?最终,我将作为TeamCity工件生成HTML报告,并包含任何失败规范的屏幕截图。

  • 问题内容: 我希望用户在Swift中以编程方式按下按钮后继续运行我的应用并为应用截图。我知道需要截图,但是我不需要整个屏幕的图片。我希望弹出一个矩形(有点像裁剪工具),并且用户可以拖动矩形并调整其大小以仅截取屏幕的特定部分的屏幕截图。我希望矩形经过a 并裁剪Web视图的图片。 问题答案: 标准的快照技术是,将其绘制到图像上下文。在iOS 10及更高版本中,您可以使用: 而且您会这样使用: 在iOS

  • 问题内容: 是否可以使用JavaScript截取网页的屏幕截图,然后将其提交回服务器? 我不太担心浏览器的安全性问题。等,因为实施将针对HTA。但是有可能吗? 问题答案: 我已经通过使用ActiveX控件为HTA完成了此操作。在VB6中构建控件以截取屏幕截图非常容易。我必须使用keybd_event API调用,因为SendKeys无法执行PrintScreen。这是该代码: 这只会使您到达将窗口

  • 我在调整ExtentReports以提供所需的输出方面遇到了一些困难。 我有一个简单的TestNG测试框架,使用TestBase类来完成繁重的任务,以保持测试的简单性。我希望以一种简单的方式实现ExtentReports,使用TestNG ITestResult接口报告通过、失败和未知。 以下是示例测试,1个通过,1个故意失败: null

  • 在Linux下有很多屏幕载图的工具,下面简单介绍一下: 在GNOME桌面中自带了一个屏幕截图工具,位于“动作”栏内。该工具功能很少,只能截取当前屏幕。 在GMIP中也可截图,在“文件”--“获取”菜单下有一个“屏幕抓图”选项可进行屏幕截图。它可截取任意图窗口的内容,并自动输入到GMIP中,我们可方便地进行处理和保存。 安装ImageMagick软件,它有一个工具叫import可用于屏幕截图。该工具