Как прикрепить скриншот при неудачном тестировании в MSTest? - PullRequest
1 голос
/ 07 мая 2019

Я не могу настроить правильный способ прикрепить скриншот к TestResult, если выполнение теста не удается

Каркас настроен с Visual Studio 2015, Selenium v3.141.0.

На этом этапе я попытался передать TestContext в качестве аргумента EventFiringWebDriver, поэтому я могу прикрепить снимок экрана с событием EventFiringWebDriver.ExceptionThrown

Однако я не являюсьлюбил передавать TestContext, потому что структура разделена между сборкой Selenium, содержащей все объекты страницы, и сборкой Tests, содержащей все тестовые случаи

TestBase.cs

[TestInitialize]
public void TestInitBase()
{
    SeleniumHelper = new HelperSelenium(TestContext);
}

HelperSelenium.cs

public HelperSelenium(TestContext testContext)
{
    Id = int.Parse(testContext.Properties["colegio"].ToString());
    WebDriver = new WebDriverSelector(testContext);
...
}

WebDriverSelector.cs

public WebDriverSelector(TestContext tc)
{
    testContext = tc;
...
    var firingWebDriver = new EventListeners(remoteDriver, testContext).GetWebDriver();
...

EventListeners.cs

public EventListeners(IWebDriver driver, TestContext testContext)
{
...

private static void UploadScreenShot()
{
    Screenshot ss = c.GetScreenshot();
    string path = Directory.GetCurrentDirectory() + "\\" +
        TestContext.TestName + "_" +
        contador + ".png";

        ss.SaveAsFile(path, ScreenshotImageFormat.Png);
        TestContext.AddResultFile(path);
}

Я бы хотел пропустить передачу TestContext из одногокласс другому, однако я не могу придумать, как на самом деле реализовать его

1 Ответ

1 голос
/ 07 мая 2019

Лучше всего обернуть свой драйвер прослушивателем событий и переопределить метод OnException с помощью собственного снимка экрана костюма. Таким образом, он будет определять исключение в любом месте и автоматически делать снимок экрана без дополнительного обслуживания,

@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();
    }
}

Ссылка: https://www.dev2qa.com/webdriver-event-listener-take-screenshot-on-exception/

Edit: Вы можете добавить путь к результату теста / записать его для трассировки, используя (Trace.WriteLine ("Path"));

...