Best Vstest code snippet using Microsoft.TestPlatform.Extensions.EventLogCollector.EventLogDataCollector.OnSessionEnd
EventLogDataCollector.cs
Source:EventLogDataCollector.cs
...89 /// </param>90 internal EventLogDataCollector(IFileHelper fileHelper)91 {92 _sessionStartEventHandler = OnSessionStart;93 _sessionEndEventHandler = OnSessionEnd;94 _testCaseStartEventHandler = OnTestCaseStart;95 _testCaseEndEventHandler = OnTestCaseEnd;96 _eventLogDirectories = new List<string>();97 ContextMap = new Dictionary<DataCollectionContext, EventLogSessionContext>();98 _fileHelper = fileHelper;99 }100 internal int MaxEntries { get; private set; }101 internal ISet<string>? EventSources { get; private set; }102 internal ISet<EventLogEntryType>? EntryTypes { get; private set; }103 internal ISet<string>? EventLogNames { get; private set; }104 /// <summary>105 /// Gets the context data.106 /// </summary>107 internal Dictionary<DataCollectionContext, EventLogSessionContext> ContextMap { get; }108 #region DataCollector Members109 /// <summary>110 /// Initializes the data collector111 /// </summary>112 /// <param name="configurationElement">113 /// The XML element containing configuration information for the data collector. Currently,114 /// this data collector does not have any configuration, so we ignore this parameter.115 /// </param>116 /// <param name="events">117 /// Object containing the execution events the data collector registers for118 /// </param>119 /// <param name="dataSink">The sink used by the data collector to send its data</param>120 /// <param name="logger">121 /// Used by the data collector to send warnings, errors, or other messages122 /// </param>123 /// <param name="dataCollectionEnvironmentContext">Provides contextual information about the agent environment</param>124 [MemberNotNull(nameof(_events), nameof(_dataSink), nameof(_logger), nameof(_dataCollectorContext))]125 public override void Initialize(126 XmlElement? configurationElement,127 DataCollectionEvents events,128 DataCollectionSink dataSink,129 DataCollectionLogger logger,130 DataCollectionEnvironmentContext? dataCollectionEnvironmentContext)131 {132 ValidateArg.NotNull(events, nameof(events));133 ValidateArg.NotNull(dataSink, nameof(dataSink));134 ValidateArg.NotNull(logger, nameof(logger));135 ValidateArg.NotNull(dataCollectionEnvironmentContext, nameof(dataCollectionEnvironmentContext));136 _events = events;137 _dataSink = dataSink;138 _logger = logger;139 _dataCollectorContext = dataCollectionEnvironmentContext!.SessionDataCollectionContext;140 // Load the configuration141 CollectorNameValueConfigurationManager nameValueSettings =142 new(configurationElement);143 // Apply the configuration144 ConfigureEventSources(nameValueSettings);145 ConfigureEntryTypes(nameValueSettings);146 ConfigureMaxEntries(nameValueSettings);147 ConfigureEventLogNames(nameValueSettings, _dataCollectorContext);148 // Register for events149 events.SessionStart += _sessionStartEventHandler;150 events.SessionEnd += _sessionEndEventHandler;151 events.TestCaseStart += _testCaseStartEventHandler;152 events.TestCaseEnd += _testCaseEndEventHandler;153 }154 #endregion155 /// <summary>156 /// The write event logs.157 /// </summary>158 /// <param name="eventLogEntries">159 /// The event log entries.160 /// </param>161 /// <param name="maxLogEntries">162 /// Max Log Entries.163 /// </param>164 /// <param name="dataCollectionContext">165 /// The data collection context.166 /// </param>167 /// <param name="requestedDuration">168 /// The requested duration.169 /// </param>170 /// <param name="timeRequestReceived">171 /// The time request received.172 /// </param>173 /// <returns>174 /// The <see cref="string"/>.175 /// </returns>176 internal string WriteEventLogs(List<EventLogEntry> eventLogEntries, int maxLogEntries, DataCollectionContext dataCollectionContext, TimeSpan requestedDuration, DateTime timeRequestReceived)177 {178 // Generate a unique but friendly Directory name in the temp directory179 string eventLogDirName = string.Format(180 CultureInfo.InvariantCulture,181 "{0}-{1}-{2:yyyy}{2:MM}{2:dd}-{2:HH}{2:mm}{2:ss}.{2:fff}",182 "Event Log",183 Environment.MachineName,184 DateTime.UtcNow);185 string eventLogDirPath = Path.Combine(Path.GetTempPath(), eventLogDirName);186 // Create the directory187 _fileHelper.CreateDirectory(eventLogDirPath);188 string eventLogBasePath = Path.Combine(eventLogDirPath, EventLogFileName);189 bool unusedFilenameFound = false;190 string eventLogPath = eventLogBasePath + ".xml";191 if (_fileHelper.Exists(eventLogPath))192 {193 for (int i = 1; !unusedFilenameFound; i++)194 {195 eventLogPath = $"{eventLogBasePath}-{i.ToString(CultureInfo.InvariantCulture)}.xml";196 if (!_fileHelper.Exists(eventLogPath))197 {198 unusedFilenameFound = true;199 }200 }201 }202 DateTime minDate = DateTime.MinValue;203 // Limit entries to a certain time range if requested204 if (requestedDuration < TimeSpan.MaxValue)205 {206 try207 {208 minDate = timeRequestReceived - requestedDuration;209 }210 catch (ArgumentOutOfRangeException)211 {212 minDate = DateTime.MinValue;213 }214 }215 Stopwatch stopwatch = new();216 stopwatch.Start();217 EventLogXmlWriter.WriteEventLogEntriesToXmlFile(218 eventLogPath,219 eventLogEntries.Where(220 entry => entry.TimeGenerated > minDate && entry.TimeGenerated < DateTime.MaxValue).OrderBy(x => x.TimeGenerated).Take(maxLogEntries).ToList(),221 _fileHelper);222 stopwatch.Stop();223 EqtTrace.Verbose(224 "EventLogDataContainer: Wrote {0} event log entries to file '{1}' in {2} seconds",225 eventLogEntries.Count,226 eventLogPath,227 stopwatch.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture));228 // Write the event log file229 FileTransferInformation fileTransferInformation =230 new(dataCollectionContext, eventLogPath, true, _fileHelper);231 TPDebug.Assert(_dataSink != null, "Initialize should have been called.");232 _dataSink.SendFileAsync(fileTransferInformation);233 EqtTrace.Verbose(234 "EventLogDataContainer: Event log successfully sent for data collection context '{0}'.",235 dataCollectionContext.ToString());236 return eventLogPath;237 }238 #region IDisposable Members239 /// <summary>240 /// Cleans up resources allocated by the data collector241 /// </summary>242 /// <param name="disposing">Not used since this class does not have a finalizer.</param>243 protected override void Dispose(bool disposing)244 {245 if (_isDisposed)246 return;247 base.Dispose(disposing);248 if (disposing)249 {250 // Unregister events251 if (_events != null)252 {253 _events.SessionStart -= _sessionStartEventHandler;254 _events.SessionEnd -= _sessionEndEventHandler;255 _events.TestCaseStart -= _testCaseStartEventHandler;256 _events.TestCaseEnd -= _testCaseEndEventHandler;257 }258 // Unregister EventLogEntry Written.259 foreach (var eventLogContainer in _eventLogContainerMap.Values)260 {261 eventLogContainer.Dispose();262 }263 // Delete all the temp event log directories264 RemoveTempEventLogDirs(_eventLogDirectories);265 }266 _isDisposed = true;267 }268 #endregion269 private static ISet<string> ParseCommaSeparatedList(string commaSeparatedList)270 {271 ISet<string> strings = new HashSet<string>();272 string[] items = commaSeparatedList.Split(new char[] { ',' });273 foreach (string item in items)274 {275 strings.Add(item.Trim());276 }277 return strings;278 }279 private void OnSessionStart(object? sender, SessionStartEventArgs e)280 {281 ValidateArg.NotNull(e, nameof(e));282 ValidateArg.NotNull(e.Context, "SessionStartEventArgs.Context");283 EqtTrace.Verbose("EventLogDataCollector: SessionStart received");284 StartCollectionForContext(e.Context);285 }286 private void OnSessionEnd(object? sender, SessionEndEventArgs e)287 {288 ValidateArg.NotNull(e, nameof(e));289 ValidateArg.NotNull(e.Context, "SessionEndEventArgs.Context");290 EqtTrace.Verbose("EventLogDataCollector: SessionEnd received");291 WriteCollectedEventLogEntries(e.Context, true, TimeSpan.MaxValue, DateTime.UtcNow);292 }293 private void OnTestCaseStart(object? sender, TestCaseStartEventArgs e)294 {295 ValidateArg.NotNull(e, nameof(e));296 ValidateArg.NotNull(e.Context, "TestCaseStartEventArgs.Context");297 if (!e.Context.HasTestCase)298 {299 Debug.Fail("Context is not for a test case");300 ValidateArg.NotNull(e.Context.TestExecId, "TestCaseStartEventArgs.Context.HasTestCase");...
OnSessionEnd
Using AI Code Generation
1using Microsoft.TestPlatform.Extensions.EventLogCollector;2using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;3[DataCollectorFriendlyName("EventLogCollector")]4{5 private EventLogCollector eventLogCollector;6 private DataCollectionEnvironmentContext context;7 public override void Initialize(8 {9 base.Initialize(configurationElement, events, dataSink, logger, environmentContext);10 this.context = environmentContext;11 this.eventLogCollector = new EventLogCollector(configurationElement, logger, this.context);12 events.SessionEnd += this.OnSessionEnd;13 }14 private void OnSessionEnd(object sender, SessionEndEventArgs args)15 {16 this.eventLogCollector.OnSessionEnd();17 }18}19using Microsoft.TestPlatform.Extensions.EventLogCollector;20using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;21[DataCollectorFriendlyName("EventLogCollector")]22{23 private EventLogCollector eventLogCollector;24 private DataCollectionEnvironmentContext context;25 public override void Initialize(26 {27 base.Initialize(configurationElement, events, dataSink, logger, environmentContext);28 this.context = environmentContext;29 this.eventLogCollector = new EventLogCollector(configurationElement, logger, this.context);30 events.SessionEnd += this.OnSessionEnd;31 }32 private void OnSessionEnd(object sender, SessionEndEventArgs args)33 {34 this.eventLogCollector.OnSessionEnd();35 }36}37using Microsoft.TestPlatform.Extensions.EventLogCollector;38using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;
OnSessionEnd
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.TestPlatform.Extensions.EventLogCollector;7{8 {9 static void Main(string[] args)10 {11 EventLogDataCollector obj = new EventLogDataCollector();12 obj.OnSessionEnd();13 }14 }15}16using System;17using System.Collections.Generic;18using System.Linq;19using System.Text;20using System.Threading.Tasks;21using Microsoft.TestPlatform.Extensions.EventLogCollector;22{23 {24 static void Main(string[] args)25 {26 EventLogDataCollector obj = new EventLogDataCollector();27 obj.OnSessionEnd();28 }29 }30}31using System;32using System.Collections.Generic;33using System.Linq;34using System.Text;35using System.Threading.Tasks;36using Microsoft.TestPlatform.Extensions.EventLogCollector;37{38 {39 static void Main(string[] args)40 {41 EventLogDataCollector obj = new EventLogDataCollector();42 obj.OnSessionEnd();43 }44 }45}46using System;47using System.Collections.Generic;48using System.Linq;49using System.Text;50using System.Threading.Tasks;51using Microsoft.TestPlatform.Extensions.EventLogCollector;52{53 {54 static void Main(string[] args)55 {56 EventLogDataCollector obj = new EventLogDataCollector();57 obj.OnSessionEnd();58 }59 }60}61using System;62using System.Collections.Generic;63using System.Linq;64using System.Text;65using System.Threading.Tasks;66using Microsoft.TestPlatform.Extensions.EventLogCollector;67{68 {69 static void Main(string[] args)70 {71 EventLogDataCollector obj = new EventLogDataCollector();72 obj.OnSessionEnd();73 }74 }75}
OnSessionEnd
Using AI Code Generation
1using Microsoft.TestPlatform.Extensions.EventLogCollector;2using System;3using System.Collections.Generic;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7{8 {9 static void Main(string[] args)10 {11 var eventLogDataCollector = new EventLogDataCollector();12 eventLogDataCollector.OnSessionEnd();13 }14 }15}
OnSessionEnd
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.IO;4using System.Linq;5using System.Text;6using System.Threading.Tasks;7using System.Xml.Linq;8using Microsoft.TestPlatform.Extensions.EventLogCollector;9using Microsoft.TestPlatform.ObjectModel.DataCollection;10{11 [DataCollectorFriendlyName("MyDataCollector")]12 {13 public override void OnSessionEnd(EndSessionEventArgs endSessionEventArgs)14 {15 base.OnSessionEnd(endSessionEventArgs);16 var file = Path.Combine(endSessionEventArgs.Configuration.RunSettings.ResultsDirectory, "mydatacollector.trx");17 var doc = XDocument.Load(file);18 var newElement = new XElement("MyDataCollector");19 newElement.Add(new XAttribute("foo", "bar"));20 doc.Root.Add(newElement);21 doc.Save(file);22 }23 }24}25using System;26using System.Collections.Generic;27using System.IO;28using System.Linq;29using System.Text;30using System.Threading.Tasks;31using System.Xml.Linq;32using Microsoft.TestPlatform.Extensions.EventLogCollector;33using Microsoft.TestPlatform.ObjectModel.DataCollection;34{35 [DataCollectorFriendlyName("MyDataCollector")]36 {37 public override void OnSessionEnd(EndSessionEventArgs endSessionEventArgs)38 {39 base.OnSessionEnd(endSessionEventArgs);40 var file = Path.Combine(endSessionEventArgs.Configuration.RunSettings.ResultsDirectory, "mydatacollector.trx");41 var doc = XDocument.Load(file);42 var newElement = new XElement("MyDataCollector");43 newElement.Add(new XAttribute("foo", "bar"));44 doc.Root.Add(newElement);45 doc.Save(file);46 }47 }48}49using System;50using System.Collections.Generic;51using System.IO;52using System.Linq;53using System.Text;54using System.Threading.Tasks;55using System.Xml.Linq;56using Microsoft.TestPlatform.Extensions.EventLogCollector;57using Microsoft.TestPlatform.ObjectModel.DataCollection;58{
OnSessionEnd
Using AI Code Generation
1{2 public override void OnSessionEnd()3 {4 base.OnSessionEnd();5 }6}7{8 public override void OnSessionEnd()9 {10 base.OnSessionEnd();11 }12}13{14 public override void OnSessionEnd()15 {16 base.OnSessionEnd();17 }18}19{20 public override void OnSessionEnd()21 {22 base.OnSessionEnd();23 }24}25{26 public override void OnSessionEnd()27 {28 base.OnSessionEnd();29 }30}31{32 public override void OnSessionEnd()33 {34 base.OnSessionEnd();35 }36}37{38 public override void OnSessionEnd()39 {40 base.OnSessionEnd();41 }42}43{44 public override void OnSessionEnd()45 {46 base.OnSessionEnd();47 }
OnSessionEnd
Using AI Code Generation
1{2 {3 static void Main(string[] args)4 {5 Console.WriteLine("Hello World!");6 Console.ReadKey();7 }8 }9}10{11 {12 static void Main(string[] args)13 {14 Console.WriteLine("Hello World!");15 Console.ReadKey();16 }17 }18}19{20 {21 static void Main(string[] args)22 {23 Console.WriteLine("Hello World!");24 Console.ReadKey();25 }26 }27}28{29 {30 static void Main(string[] args)31 {32 Console.WriteLine("Hello World!");33 Console.ReadKey();34 }35 }36}37{38 {39 static void Main(string[] args)40 {41 Console.WriteLine("Hello World!");42 Console.ReadKey();43 }44 }45}46{47 {48 static void Main(string[] args)49 {50 Console.WriteLine("Hello World!");51 Console.ReadKey();52 }53 }54}55{56 {57 static void Main(string[] args)58 {59 Console.WriteLine("Hello World!");60 Console.ReadKey();61 }62 }63}64{65 {66 static void Main(string[] args)67 {68 Console.WriteLine("Hello World!");
OnSessionEnd
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.TestPlatform.Extensions.EventLogCollector;7{8 [DataCollectorFriendlyName("EventLogCollector")]9 {10 public override void OnSessionEnd(EventArgs e)11 {12 base.OnSessionEnd(e);13 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");14 }15 }16}17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;22using Microsoft.TestPlatform.Extensions.EventLogCollector;23{24 [DataCollectorFriendlyName("EventLogCollector")]25 {26 public override void OnSessionEnd(EventArgs e)27 {28 base.OnSessionEnd(e);29 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");30 }31 }32}33using System;34using System.Collections.Generic;35using System.Linq;36using System.Text;37using System.Threading.Tasks;38using Microsoft.TestPlatform.Extensions.EventLogCollector;39{40 [DataCollectorFriendlyName("EventLogCollector")]41 {42 public override void OnSessionEnd(EventArgs e)43 {44 base.OnSessionEnd(e);45 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");46 }47 }48}
OnSessionEnd
Using AI Code Generation
1using System;2using System.IO;3using System.Xml;4using System.Xml.Linq;5using System.Xml.XPath;6using Microsoft.TestPlatform.Extensions.EventLogCollector;7using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;8{9 {10 private EventLogDataCollector eventLogDataCollector;11 private string runSettings;12 public DataCollector(string runSettings)13 {14 this.runSettings = runSettings;15 this.eventLogDataCollector = new EventLogDataCollector();16 }17 public override void SendFileAsync(Uri filePath, bool isFileCompleted)18 {19 throw new NotImplementedException();20 }21 public override void SendFileAsync(Uri filePath, bool isFileCompleted, object sender, EventArgs args)22 {23 throw new NotImplementedException();24 }25 public override void SendLogMessage(TestMessageLevel level, string message)26 {27 throw new NotImplementedException();28 }29 public override void SendMetrics(Collection<Metrics> metrics)30 {31 throw new NotImplementedException();32 }33 public override void SendRawMessage(string rawMessage)34 {35 throw new NotImplementedException();36 }37 public override void SendTestCaseStart(TestCaseStartEventArgs testCaseStartEventArgs)38 {39 throw new NotImplementedException();40 }41 public override void SendTestCaseEnd(TestCaseEndEventArgs testCaseEndEventArgs)42 {43 throw new NotImplementedException();44 }45 public override void SendTestResult(TestResultEventArgs testResultEventArgs)46 {47 throw new NotImplementedException();48 }49 public override void SendTestRunAttachments(Collection<AttachmentSet> attachments)50 {51 throw new NotImplementedException();52 }53 public override void SendTestRunEnd(TestRunEndEventArgs testRunEndEventArgs)54 {55 throw new NotImplementedException();56 }57 public override void SendTestRunStart(TestRunStartEventArgs testRunStartEventArgs)58 {59 throw new NotImplementedException();60 }61 public override void SendTestSessionEnd(TestSessionEndEventArgs testSessionEndEventArgs)62 {63 var doc = XDocument.Parse(runSettings);
OnSessionEnd
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using System.Xml;7using Microsoft.TestPlatform.Extensions.EventLogCollector;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;9using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollector.InProcDataCollector;10{11 [DataCollectorFriendlyName("EventLogCollector")]12 {13 public override void Initialize(XmlElement configurationElement, DataCollectionEvents events, DataCollectionSink dataSink, DataCollectionLogger logger, DataCollectionEnvironmentContext environmentContext)14 {15 events.SessionEnd += Events_SessionEnd;16 }17 private void Events_SessionEnd(object sender, SessionEndEventArgs e)18 {19 EventLogDataCollector eventLogDataCollector = new EventLogDataCollector();20 var endTime = eventLogDataCollector.OnSessionEnd();21 Console.WriteLine("Session end time is " + endTime);22 }23 }24}
OnSessionEnd
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.TestPlatform.Extensions.EventLogCollector;7{8 [DataCollectorFriendlyName("EventLogCollector")]9 {10 public override void OnSessionEnd(EventArgs e)11 {12 base.OnSessionEnd(e);13 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");14 }15 }16}17using System;18using System.Collections.Generic;19using System.Linq;20using System.Text;21using System.Threading.Tasks;22using Microsoft.TestPlatform.Extensions.EventLogCollector;23{24 [DataCollectorFriendlyName("EventLogCollector")]25 {26 public override void OnSessionEnd(EventArgs e)27 {28 base.OnSessionEnd(e);29 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");30 }31 }32}33using System;34using System.Collections.Generic;35using System.Linq;36using System.Text;37using System.Threading.Tasks;38using Microsoft.TestPlatform.Extensions.EventLogCollector;39{40 [DataCollectorFriendlyName("EventLogCollector")]41 {42 public override void OnSessionEnd(EventArgs e)43 {44 base.OnSessionEnd(e);45 EventLogCollectorLogger.LogMessage("EventLogCollector: OnSessionEnd");46 }47 }48}
OnSessionEnd
Using AI Code Generation
1using System;2using System.IO;3using System.Xml;4using System.Xml.Linq;5using System.Xml.XPath;6using Microsoft.TestPlatform.Extensions.EventLogCollector;7using Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection;8{9 {10 private EventLogDataCollector eventLogDataCollector;11 private string runSettings;12 public DataCollector(string runSettings)13 {14 this.runSettings = runSettings;15 this.eventLogDataCollector = new EventLogDataCollector();16 }17 public override void SendFileAsync(Uri filePath, bool isFileCompleted)18 {19 throw new NotImplementedException();20 }21 public override void SendFileAsync(Uri filePath, bool isFileCompleted, object sender, EventArgs args)22 {23 throw new NotImplementedException();24 }25 public override void SendLogMessage(TestMessageLevel level, string message)26 {27 throw new NotImplementedException();28 }29 public override void SendMetrics(Collection<Metrics> metrics)30 {31 throw new NotImplementedException();32 }33 public override void SendRawMessage(string rawMessage)34 {35 throw new NotImplementedException();36 }37 public override void SendTestCaseStart(TestCaseStartEventArgs testCaseStartEventArgs)38 {39 throw new NotImplementedException();40 }41 public override void SendTestCaseEnd(TestCaseEndEventArgs testCaseEndEventArgs)42 {43 throw new NotImplementedException();44 }45 public override void SendTestResult(TestResultEventArgs testResultEventArgs)46 {47 throw new NotImplementedException();48 }49 public override void SendTestRunAttachments(Collection<AttachmentSet> attachments)50 {51 throw new NotImplementedException();52 }53 public override void SendTestRunEnd(TestRunEndEventArgs testRunEndEventArgs)54 {55 throw new NotImplementedException();56 }57 public override void SendTestRunStart(TestRunStartEventArgs testRunStartEventArgs)58 {59 throw new NotImplementedException();60 }61 public override void SendTestSessionEnd(TestSessionEndEventArgs testSessionEndEventArgs)62 {63 var doc = XDocument.Parse(runSettings);
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!