Search code examples
c#seleniumxunitspecflow

xUnit, SpecFlow Selenium and ITestOutputHelper problem


Still having a problem with a automation test project in VS Code using C#, Selenium, SpecFlow and xUnit I am trying to output to logs with ITestOutputHelper as the test progress.

So I have this class

using Xunit.Abstractions;

[Binding]
public class Logging
{
    private readonly ITestOutputHelper _testOutputHelper;

    public Logging(ITestOutputHelper testOutputHelper)
    {
        _testOutputHelper = testOutputHelper;
    }

    public void WriteOutput(string theMessage)
    {
        _testOutputHelper.WriteLine(theMessage);
    }
}

Which is called from this class

public static class WriteLog
{
    static string _logout;

    public static void WriteLogData(string logout)
    {
        _logout = logout;
    }

    public static void WriteToLog(this Logging logger)
    {
        logger.WriteOutput(_logout);
    }
}

And I am trying to call WriteLog from the tests with the following

public static void WriteToReport(string theMessage)
{
    WriteLog. WriteLogData(theMessage);
    WriteLog. WriteToLog();
}

But I get an error with WriteLog.WriteToLog(); The error is

There is no argument given that corresponds to the required formal parameter 'logger' of 'WriteLog.WriteToLog(Logging)'

So my question is, how do I send log information to Logging.WriteOutput?

Can anyone offer any advice please?

Thanks in advance

Kev


Solution

  • This was the solution

    Step Class TestAppSteps
    

    using Xunit.Abstractions;

    [Binding]
    public sealed class TestAppSteps : TestAppPage
    {
        public TestAppSteps(ITestOutputHelper output) : base(output)
        {
        }
    
        code
    }           
    

    Page Class TestAppPage
    using Xunit.Abstractions;

    public class TestAppPage : PageAssertions
    {
    
        public TestAppPage(ITestOutputHelper output) : base(output)
        {
    
        }
        
        code
    }
    

    Utility Class PageAssertions using Xunit.Abstractions;

    public class PageAssertions : SharedClass
    {
        public PageAssertions(ITestOutputHelper output) : base(output) { }
    
        code inc'
        WriteToReport("Pass: URL is correct");
    }
    

    Utility Class SharedClass using Xunit.Abstractions;

    public abstract class SharedClass : OutputFunctions
    {
        public SharedClass(ITestOutputHelper output) 
            : base(output)
        {
        }
        
        shared code including
        WriteToReport(GetTheCurrentMethod());
    }   
    

    Abstract Class OutputFunctions

    using Xunit.Abstractions;

    public abstract class OutputFunctions
    {
        protected readonly ITestOutputHelper _output;
    
        public OutputFunctions(ITestOutputHelper output)
        {
            _output = output;
        }
    
        public void WriteToReport(string theMessage)
        {
            _output.WriteLine(theMessage);
        }
    }