Best Coyote code snippet using Microsoft.Coyote.Actors.EventGroup.EventGroup
IActorRuntime.cs
Source:IActorRuntime.cs
...45 /// <param name="type">Type of the actor.</param>46 /// <param name="initialEvent">Optional event used during initialization.</param>47 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>48 /// <returns>The result is the actor id.</returns>49 ActorId CreateActor(Type type, Event initialEvent = null, EventGroup eventGroup = null);50 /// <summary>51 /// Creates a new actor of the specified <see cref="Type"/> and name, and with the52 /// specified optional <see cref="Event"/>. This event is given to the <see cref="Actor.InitializeAsync"/>53 /// method on the new actor.54 /// </summary>55 /// <param name="type">Type of the actor.</param>56 /// <param name="name">Optional name used for logging.</param>57 /// <param name="initialEvent">Optional event used during initialization.</param>58 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>59 /// <returns>The result is the actor id.</returns>60 ActorId CreateActor(Type type, string name, Event initialEvent = null, EventGroup eventGroup = null);61 /// <summary>62 /// Creates a new actor of the specified type, using the specified <see cref="ActorId"/>.63 /// This method optionally passes an <see cref="Event"/>. This event is given to the64 /// InitializeAsync method on the new actor.65 /// </summary>66 /// <param name="id">Unbound actor id.</param>67 /// <param name="type">Type of the actor.</param>68 /// <param name="initialEvent">Optional event used during initialization.</param>69 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>70 /// <returns>The result is the actor id.</returns>71 ActorId CreateActor(ActorId id, Type type, Event initialEvent = null, EventGroup eventGroup = null);72 /// <summary>73 /// Creates a new actor of the specified <see cref="Type"/> and with the specified74 /// optional <see cref="Event"/>. This event is given to the <see cref="Actor.InitializeAsync"/>75 /// method on the new actor. The method returns only when the actor is initialized and76 /// the <see cref="Event"/> (if any) is handled.77 /// </summary>78 /// <param name="type">Type of the actor.</param>79 /// <param name="initialEvent">Optional event used during initialization.</param>80 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>81 /// <returns>Task that represents the asynchronous operation. The task result is the actor id.</returns>82 [Obsolete("Use AwaitableEventGroup<T> instead to coordinate completion of CreateActor operations")]83 Task<ActorId> CreateActorAndExecuteAsync(Type type, Event initialEvent = null, EventGroup eventGroup = null);84 /// <summary>85 /// Creates a new actor of the specified <see cref="Type"/> and name, and with the86 /// specified optional <see cref="Event"/>. This event is given to the <see cref="Actor.InitializeAsync"/>87 /// method on the new actor. The method returns only when the actor is88 /// initialized and the <see cref="Event"/> (if any) is handled.89 /// </summary>90 /// <param name="type">Type of the actor.</param>91 /// <param name="name">Optional name used for logging.</param>92 /// <param name="initialEvent">Optional event used during initialization.</param>93 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>94 /// <returns>Task that represents the asynchronous operation. The task result is the actor id.</returns>95 [Obsolete("Use AwaitableEventGroup<T> instead to coordinate completion of CreateActor operations")]96 Task<ActorId> CreateActorAndExecuteAsync(Type type, string name, Event initialEvent = null,97 EventGroup eventGroup = null);98 /// <summary>99 /// Creates a new actor of the specified <see cref="Type"/>, using the specified unbound100 /// actor id, and passes the specified optional <see cref="Event"/>. This event is given to101 /// the InitializeAsync method on the new actor. The method returns only when102 /// the actor is initialized and the <see cref="Event"/> (if any)103 /// is handled.104 /// </summary>105 /// <param name="id">Unbound actor id.</param>106 /// <param name="type">Type of the actor.</param>107 /// <param name="initialEvent">Optional event used during initialization.</param>108 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>109 /// <returns>Task that represents the asynchronous operation. The task result is the actor id.</returns>110 [Obsolete("Use AwaitableEventGroup<T> instead to coordinate completion of CreateActor operations")]111 Task<ActorId> CreateActorAndExecuteAsync(ActorId id, Type type, Event initialEvent = null,112 EventGroup eventGroup = null);113 /// <summary>114 /// Sends an asynchronous <see cref="Event"/> to an actor.115 /// </summary>116 /// <param name="targetId">The id of the target.</param>117 /// <param name="e">The event to send.</param>118 /// <param name="eventGroup">An optional event group associated with this Actor.</param>119 /// <param name="options">Optional configuration of a send operation.</param>120 void SendEvent(ActorId targetId, Event e, EventGroup eventGroup = null, SendOptions options = null);121 /// <summary>122 /// Sends an <see cref="Event"/> to an actor. Returns immediately if the target was already123 /// running. Otherwise blocks until the target handles the event and reaches quiescense.124 /// </summary>125 /// <param name="targetId">The id of the target.</param>126 /// <param name="e">The event to send.</param>127 /// <param name="eventGroup">An optional event group associated with the new Actor.</param>128 /// <param name="options">Optional configuration of a send operation.</param>129 /// <returns>Task that represents the asynchronous operation. The task result is true if130 /// the event was handled, false if the event was only enqueued.</returns>131 [Obsolete("Use AwaitableEventGroup<T> instead to coordinate completion of SendEvent operations")]132 Task<bool> SendEventAndExecuteAsync(ActorId targetId, Event e, EventGroup eventGroup = null, SendOptions options = null);133 /// <summary>134 /// Returns the current <see cref="EventGroup"/> of the actor with the specified id. Returns null135 /// if the id is not set, or if the <see cref="ActorId"/> is not associated with this runtime. During136 /// testing, the runtime asserts that the specified actor is currently executing.137 /// </summary>138 /// <param name="currentActorId">The id of the currently executing actor.</param>139 /// <returns>The current EventGroup or null.</returns>140 EventGroup GetCurrentEventGroup(ActorId currentActorId);141 /// <summary>142 /// The old way of setting the <see cref="ICoyoteRuntime.Logger"/> property.143 /// </summary>144 /// <remarks>145 /// The new way is to just set the Logger property to an <see cref="ILogger"/> object.146 /// This method is only here for compatibility and has a minor perf impact as it has to147 /// wrap the writer in an object that implements the <see cref="ILogger"/> interface.148 /// </remarks>149 /// <param name="writer">The writer to use for logging.</param>150 /// <returns>The previously installed logger.</returns>151 [Obsolete("Please set the Logger property directly instead of calling this method.")]152 TextWriter SetLogger(TextWriter writer);153 }154}...
EventGroup.cs
Source:EventGroup.cs
...4namespace Microsoft.Coyote.Actors5{6 /// <summary>7 /// An object representing a long running context involving one or more actors.8 /// An `EventGroup` can be provided as an optional argument in CreateActor and SendEvent.9 /// If a null `EventGroup` is passed then the `EventGroup` is inherited from the sender10 /// or target actors (based on which ever one has a <see cref="Actor.CurrentEventGroup"/>).11 /// In this way an `EventGroup` is automatically communicated to all actors involved in12 /// completing some larger operation. Each actor involved can find the `EventGroup` using13 /// their <see cref="Actor.CurrentEventGroup"/> property.14 /// </summary>15 public class EventGroup16 {17 /// <summary>18 /// A special null event group that can be used to stop the <see cref="Actor.CurrentEventGroup"/> from19 /// being passed along when <see cref="Actor.CreateActor(ActorId, Type, string, Event, EventGroup)"/>20 /// or <see cref="Actor.SendEvent(ActorId, Event, EventGroup, SendOptions)"/> is invoked.21 /// </summary>22 public static EventGroup Null = new EventGroup();23 /// <summary>24 /// The unique id of this `EventGroup`, initialized with Guid.Empty.25 /// </summary>26 public Guid Id { get; }27 /// <summary>28 /// An optional friendly name for this `EventGroup`.29 /// </summary>30 public string Name { get; }31 /// <summary>32 /// Initializes a new instance of the <see cref="EventGroup"/> class.33 /// </summary>34 /// <param name="id">The id for this `EventGroup` (defaults to Guid.Empty).</param>35 /// <param name="name">An optional friendly name for this `EventGroup`.</param>36 public EventGroup(Guid id = default, string name = null)37 {38 this.Id = id;39 this.Name = name;40 }41 }42}...
EventGroup
Using AI Code Generation
1using Microsoft.Coyote.Actors;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 runtime = Microsoft.Coyote.Runtime.Create();12 runtime.RegisterMonitor(typeof(Monitor1));13 runtime.CreateActor(typeof(Actor1));14 runtime.CreateActor(typeof(Actor2));15 runtime.Start();16 Console.ReadLine();17 }18 }19 {20 [OnEventDoAction(typeof(Event1), nameof(Event1Handler))]21 class Init : State { }22 void Event1Handler()23 {24 this.SendEvent(this.Id, new Event2());25 this.SendEvent(this.Id, new Event3());26 this.SendEvent(this.Id, new Event4());27 }28 }29 {30 [OnEventDoAction(typeof(Event2), nameof(Event2Handler))]31 [OnEventDoAction(typeof(Event3), nameof(Event3Handler))]32 [OnEventDoAction(typeof(Event4), nameof(Event4Handler))]33 class Init : State { }34 void Event2Handler()35 {36 Console.WriteLine("Event2");37 }38 void Event3Handler()39 {40 Console.WriteLine("Event3");41 }42 void Event4Handler()43 {44 Console.WriteLine("Event4");45 }46 }47 {48 [OnEventDoAction(typeof(Event2), nameof(Event2Handler))]49 [OnEventDoAction(typeof(Event3), nameof(Event3Handler))]50 [OnEventDoAction(typeof(Event4), nameof(Event4Handler))]51 class Init : State { }52 void Event2Handler()53 {54 Console.WriteLine("Event2");55 }56 void Event3Handler()57 {58 Console.WriteLine("Event3");59 }60 void Event4Handler()61 {62 Console.WriteLine("Event4");63 }64 }65 class Event1 : Event { }66 class Event2 : Event { }67 class Event3 : Event { }68 class Event4 : Event { }69}
EventGroup
Using AI Code Generation
1using System;2using Microsoft.Coyote;3using Microsoft.Coyote.Actors;4{5 {6 private static void Main(string[] args)7 {8 var runtime = RuntimeFactory.Create();9 runtime.CreateActor(typeof(Actor1));10 runtime.Wait();11 }12 }13 {14 private EventGroup eg;15 protected override async System.Threading.Tasks.Task OnInitializeAsync(Event initialEvent)16 {17 eg = new EventGroup();18 eg.SubscribeEvent(typeof(Event1));19 eg.SubscribeEvent(typeof(Event2));20 eg.SubscribeEvent(typeof(Event3));21 eg.SubscribeEvent(typeof(Event4));22 eg.SubscribeEvent(typeof(Event5));23 eg.SubscribeEvent(typeof(Event6));24 eg.SubscribeEvent(typeof(Event7));25 eg.SubscribeEvent(typeof(Event8));26 eg.SubscribeEvent(typeof(Event9));27 eg.SubscribeEvent(typeof(Event10));28 eg.SubscribeEvent(typeof(Event11));29 eg.SubscribeEvent(typeof(Event12));30 eg.SubscribeEvent(typeof(Event13));31 eg.SubscribeEvent(typeof(Event14));32 eg.SubscribeEvent(typeof(Event15));33 eg.SubscribeEvent(typeof(Event16));34 eg.SubscribeEvent(typeof(Event17));35 eg.SubscribeEvent(typeof(Event18));36 eg.SubscribeEvent(typeof(Event19));37 eg.SubscribeEvent(typeof(Event20));38 eg.SubscribeEvent(typeof(Event21));39 eg.SubscribeEvent(typeof(Event22));40 eg.SubscribeEvent(typeof(Event23));41 eg.SubscribeEvent(typeof(Event24));42 eg.SubscribeEvent(typeof(Event25));43 eg.SubscribeEvent(typeof(Event26));44 eg.SubscribeEvent(typeof(Event27));45 eg.SubscribeEvent(typeof(Event28));46 eg.SubscribeEvent(typeof(Event29));47 eg.SubscribeEvent(typeof(Event30));48 eg.SubscribeEvent(typeof(Event31));49 eg.SubscribeEvent(typeof(Event32));50 eg.SubscribeEvent(typeof(Event33));51 eg.SubscribeEvent(typeof(Event34));52 eg.SubscribeEvent(typeof(Event35));53 eg.SubscribeEvent(typeof(Event36));54 eg.SubscribeEvent(typeof(Event37));55 eg.SubscribeEvent(typeof(Event38));56 eg.SubscribeEvent(typeof(Event39));57 eg.SubscribeEvent(typeof(Event40));58 eg.SubscribeEvent(typeof(Event41));59 eg.SubscribeEvent(typeof(Event42));60 eg.SubscribeEvent(typeof(Event43));61 eg.SubscribeEvent(typeof(Event44));62 eg.SubscribeEvent(typeof(Event45));63 eg.SubscribeEvent(typeof(Event46));64 eg.SubscribeEvent(typeof(Event47));65 eg.SubscribeEvent(typeof(Event48));66 eg.SubscribeEvent(typeof(Event49));
EventGroup
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using Microsoft.Coyote.Tasks;6{7 {8 public static void Main(string[] args)9 {10 var config = Configuration.Create();11 config.MaxSchedulingSteps = 100;12 Runtime runtime = Runtime.Create(config);13 runtime.CreateActor(typeof(Actor1));14 runtime.CreateActor(typeof(Actor2));15 runtime.CreateActor(typeof(Actor3));16 runtime.Run();17 }18 }19 {20 protected override Task OnInitializeAsync(Event initialEvent)21 {22 this.SendEvent(this.Id, new E1());23 return Task.CompletedTask;24 }25 }26 {27 protected override Task OnInitializeAsync(Event initialEvent)28 {29 this.SendEvent(this.Id, new E2());30 return Task.CompletedTask;31 }32 }33 {34 protected override async Task OnInitializeAsync(Event initialEvent)35 {36 await EventGroup.WaitAllAsync(this, new E1(), new E2());37 this.SendEvent(this.Id, new E3());38 }39 }40 {41 }42 {43 }44 {45 }46}47using System;48using System.Threading.Tasks;49using Microsoft.Coyote;50using Microsoft.Coyote.Actors;51using Microsoft.Coyote.Tasks;52{53 {54 public static void Main(string[] args)55 {56 var config = Configuration.Create();57 config.MaxSchedulingSteps = 100;58 Runtime runtime = Runtime.Create(config);59 runtime.CreateActor(typeof(Actor1));60 runtime.CreateActor(typeof(Actor2));61 runtime.CreateActor(typeof(Actor3));62 runtime.Run();63 }64 }65 {66 protected override Task OnInitializeAsync(Event initialEvent)67 {68 this.SendEvent(this.Id, new E1());69 return Task.CompletedTask;70 }71 }72 {73 protected override Task OnInitializeAsync(Event initialEvent)
EventGroup
Using AI Code Generation
1using System;2using Microsoft.Coyote.Actors;3using Microsoft.Coyote.Specifications;4using Microsoft.Coyote.Tasks;5{6 {7 static void Main(string[] args)8 {9 var runtime = RuntimeFactory.Create();10 runtime.CreateActor(typeof(MyActor), new MyEvent());11 }12 }13 {14 }15 {16 private EventGroup group;17 protected override async Task OnInitializeAsync(Event initialEvent)18 {19 this.group = new EventGroup();20 this.group.AddEvent(typeof(MyEvent));21 this.group.OnWaitCompleted += this.OnWaitCompleted;22 await this.group.WaitAsync();23 }24 private void OnWaitCompleted(object sender, EventArgs e)25 {26 }27 }28}
EventGroup
Using AI Code Generation
1using System;2using System.Collections.Generic;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5{6 {7 public static void Main(string[] args)8 {9 var runtime = RuntimeFactory.Create();10 runtime.CreateActor(typeof(Test));11 }12 }13 {14 {15 public int Value;16 }17 {18 public int Value;19 }20 {21 public int Value;22 }23 {24 public int Value;25 }26 {27 public int Value;28 }29 {30 public int Value;31 }32 {33 public int Value;34 }35 {36 public int Value;37 }38 {39 public int Value;40 }41 {42 public int Value;43 }44 {45 public int Value;46 }47 {48 public int Value;49 }50 {51 public int Value;52 }53 {54 public int Value;55 }56 {57 public int Value;58 }59 {60 public int Value;61 }62 {63 public int Value;64 }65 {66 public int Value;67 }68 {69 public int Value;70 }71 {72 public int Value;73 }74 {75 public int Value;76 }77 {78 public int Value;79 }80 {81 public int Value;82 }83 {84 public int Value;85 }86 {87 public int Value;88 }
EventGroup
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using Microsoft.Coyote.Actors.Timers;6using Microsoft.Coyote.Specifications;7{8 static void Main(string[] args)9 {10 Run();11 }12 static void Run()13 {14 var runtime = RuntimeFactory.Create();15 runtime.RegisterMonitor(typeof(Monitor));16 runtime.CreateActor(typeof(Actor1));17 runtime.CreateActor(typeof(Actor2));18 runtime.CreateActor(typeof(Actor3));19 runtime.Start();20 }21}22{23 [OnEventDoAction(typeof(Actor1Event), nameof(Actor1Handler))]24 [OnEventDoAction(typeof(Actor2Event), nameof(Actor2Handler))]25 [OnEventDoAction(typeof(Actor3Event), nameof(Actor3Handler))]26 [IgnoreEvents(typeof(Actor1Event), typeof(Actor2Event), typeof(Actor3Event))]27 class Init : State { }28 void Actor1Handler()29 {30 Console.WriteLine("Actor1Event received");31 }32 void Actor2Handler()33 {34 Console.WriteLine("Actor2Event received");35 }36 void Actor3Handler()37 {38 Console.WriteLine("Actor3Event received");39 }40}41{42 [OnEntry(nameof(InitOnEntry))]43 [OnEventDoAction(typeof(Actor2Event), nameof(HandleActor2Event))]44 [OnEventDoAction(typeof(Actor3Event), nameof(HandleActor3Event))]45 [IgnoreEvents(typeof(Actor2Event), typeof(Actor3Event))]46 class Init : State { }47 void InitOnEntry()48 {49 this.SendEvent(this.Id, new Actor2Event());50 this.SendEvent(this.Id, new Actor3Event());51 this.RaiseGotoStateEvent<WaitForEvents>();52 }53 void HandleActor2Event()54 {55 this.SendEvent(this.Id, new Actor2Event());56 }57 void HandleActor3Event()58 {59 this.SendEvent(this.Id, new Actor3Event());60 }61 [OnEntry(nameof(WaitForEventsOnEntry))]62 [OnEventDoAction(typeof(Actor2Event), nameof(HandleActor2Event))]63 [OnEventDoAction(typeof(Actor3Event), nameof(HandleActor3Event))]
EventGroup
Using AI Code Generation
1using System;2using Microsoft.Coyote.Actors;3{4 {5 public static void Main()6 {7 var eventGroup = new EventGroup();8 eventGroup.AddEvent(new Event());
EventGroup
Using AI Code Generation
1using System;2using System.Threading.Tasks;3using Microsoft.Coyote;4using Microsoft.Coyote.Actors;5using Microsoft.Coyote.Specifications;6using Microsoft.Coyote.Tasks;7using Microsoft.Coyote.Actors.Timers;8using Microsoft.Coyote.Actors.BugFinding;9using Microsoft.Coyote.Actors.BugFinding.Strategies;10using Microsoft.Coyote.Actors.BugFinding.Strategies.Scheduling;11using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration;12using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies;13using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Bounded;14using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded;15using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics;16using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.DPOR;17using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.FIFO;18using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.LIFO;19using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random;20using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random.RandomWalk;21using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random.RandomWalk.RandomWalkStrategies;22using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random.RandomWalk.RandomWalkStrategies.Bounded;23using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random.RandomWalk.RandomWalkStrategies.Unbounded;24using Microsoft.Coyote.Actors.BugFinding.Strategies.StateExploration.Strategies.Unbounded.ExplorationHeuristics.Random.RandomWalk.RandomWalkStrategies.Unbounded.RandomWalkExplorationHeuristics;
EventGroup
Using AI Code Generation
1using System;2using Microsoft.Coyote.Actors;3using Microsoft.Coyote.Runtime;4{5 {6 public static void Main(string[] args)7 {8 RuntimeEnvironment.Setup();9 RuntimeEnvironment.StartExecution();10 var m = new MachineId(typeof(M));11 RuntimeEnvironment.CreateActor(m, null);12 RuntimeEnvironment.StopExecution();13 }14 }15 {16 [OnEntry(nameof(InitOnEntry))]17 [OnEventDoAction(typeof(EventGroupResult), nameof(EventGroupResultAction))]18 class Init : MachineState { }19 void InitOnEntry()20 {21 var e1 = new E1();22 var e2 = new E2();23 var e3 = new E3();24 this.SendEvent(this.Id, e1);25 this.SendEvent(this.Id, e2);26 this.SendEvent(this.Id, e3);27 var eg = new EventGroup(e1, e2, e3);28 this.Wait(eg);29 }30 void EventGroupResultAction()31 {32 this.RaiseGotoStateEvent<Done>();33 }34 [OnEntry(nameof(DoneOnEntry))]35 class Done : MachineState { }36 void DoneOnEntry()37 {38 this.RaiseHaltEvent();39 }40 }41 public class E1 : Event { }42 public class E2 : Event { }43 public class E3 : Event { }44}45using System;46using Microsoft.Coyote.Actors;47using Microsoft.Coyote.Runtime;48{49 {50 public static void Main(string[] args)51 {52 RuntimeEnvironment.Setup();53 RuntimeEnvironment.StartExecution();54 var m = new MachineId(typeof(M));55 RuntimeEnvironment.CreateActor(m, null);56 RuntimeEnvironment.StopExecution();57 }58 }
EventGroup
Using AI Code Generation
1using Microsoft.Coyote.Actors;2using System;3using System.Threading.Tasks;4{5 static void Main(string[] args)6 {7 var eg = new EventGroup();8 var t = Task.Run(() =>9 {10 for (int i = 0; i < 5; i++)11 {12 eg.Add(new Event());13 Console.WriteLine("Sent event " + i);14 }15 });16 eg.WaitAll();17 Console.WriteLine("All events received");18 }19}
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!!