Selenium C# NUnit как сделать и сохранить скриншот неудачного теста в папку

Я новичок в Selenium и столкнулся с проблемой - как сделать и сохранить снимок экрана в определенную папку. Я использую связь Selenium+C#+NUnit.

Прочитал много информации по этому поводу, но большинство из них посвящено тому, как сделать снимок экрана и добавить его в html-файл. Но это не то, что мне нужно.

Мне нужно сохранить файл снимка экрана в папку, поэтому, когда я запускаю Pipeline в AzureDevOps, блок «Результаты тестов» также содержит этот снимок экрана и отображает его.

Я использовал эту часть кода. Тест запускается и не проходит, но скриншот не сделан

[OneTimeTearDown]
public void OneTimeTearDown()
        {
            if (TestContext.CurrentContext.Result.Outcome != ResultState.Failure)
            {
                var screenshot = ((ITakesScreenshot)driver).GetScreenshot();
                var filePath = "pathToTheFolder\\Screenshots\\"; 
                screenshot.SaveAsFile(filePath, Png);
            }
        }

Может быть, кто-то может помочь в этом и, возможно, поделится знаниями и кодом)

Спасибо вам всем!

Привет, рад узнать, что вы нашли решение этой проблемы! Пожалуйста, подумайте над тем, чтобы ответить на него и принять его как ответ, чтобы изменить его статус на «Отвечено». Смотрите можно я сам отвечу на свой вопрос Напоминаю :)

Minxin Yu - MSFT 21.11.2022 09:28
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пытаться

using System.Drawing; //add this using statement

[OneTimeTearDown]
public void OneTimeTearDown()
{
    if (TestContext.CurrentContext.Result.Outcome != ResultState.Failure)
    {
        var screenshot = ((ITakesScreenshot)driver).GetScreenshot();
        var filePath = "pathToTheFolder\\Screenshots\\"; 
        screenshot.SaveAsFile(filePath + System.Drawing.Imaging.ImageFormat.Png);
    }
}

Этот урок выглядит как то, что вам нужно

Спасибо @Narish за ответ! Направит меня на верный путь! И статья полезная. Объяснение будет в комментарии ниже)

Mariia 17.11.2022 10:08
Ответ принят как подходящий

Нашел способ достичь своей цели - сохранить скриншоты для неудачных тестов в папке bin проекта и прикрепить их к разделу Pipeline «Результат теста» в дальнейшем. Это окончательный рабочий код. Я удалил его из [OneTimeTearDown] и установил на [TearDown]. А также добавлено вложение с последней строкой, позволяющее отправлять скриншоты в блок Pipelines "Результат теста".

Это мой файл Base.cs, в котором я нахожу IWebDriver, все методы Setup и TearDown.

using E2E_Tests.TestData;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using WebDriverManager.DriverConfigs.Impl;
using OpenQA.Selenium.Chrome;
using System.Configuration;
using NUnit.Framework.Interfaces;

        [TearDown]
        
                public void TearDown()
                {
                    TakeScreenshotDefaultImageFormat();
                    driver.Close();
                }
                public void TakeScreenshotDefaultImageFormat()
                {
                    
                    if (TestContext.CurrentContext.Result.Outcome == ResultState.Error)
                    {
                        var screenshot = ((ITakesScreenshot)driver).GetScreenshot();
                        var screenshotDirectoryPath = Path.Combine(TestContext.CurrentContext.TestDirectory, "Screenshots\\");
                        if (!Directory.Exists(screenshotDirectoryPath))
                        {
                            Directory.CreateDirectory(screenshotDirectoryPath);
                        }
                        var currentDate = DateTime.Now;
                        var filePath = $"{screenshotDirectoryPath}{TestContext.CurrentContext.Test.Name}_{currentDate.ToString("yyyy.MM.dd-HH.mm.ss")}.png";
                        screenshot.SaveAsFile(filePath);
                        TestContext.AddTestAttachment(filePath);
                    }
                }

Другие вопросы по теме