Best Citrus code snippet using com.consol.citrus.vertx.endpoint.VertxConsumer.receive
Source:VertxConsumer.java
...47 this.vertx = vertx;48 this.endpointConfiguration = endpointConfiguration;49 }50 @Override51 public Message receive(TestContext context, long timeout) {52 if (log.isDebugEnabled()) {53 log.debug("Receiving message on Vert.x event bus address: '" + endpointConfiguration.getAddress() + "'");54 }55 VertxSingleMessageHandler vertxMessageHandler = new VertxSingleMessageHandler();56 MessageConsumer<Object> vertxConsumer = vertx.eventBus().consumer(endpointConfiguration.getAddress(), vertxMessageHandler);57 try {58 long timeLeft = timeout;59 Message message = endpointConfiguration.getMessageConverter().convertInbound(vertxMessageHandler.getMessage(), endpointConfiguration, context);60 while (message == null && timeLeft > 0) {61 timeLeft -= endpointConfiguration.getPollingInterval();62 if (RETRY_LOG.isDebugEnabled()) {63 RETRY_LOG.debug(String.format("Waiting for message on Vert.x event bus address '%s' - retrying in %s ms",64 endpointConfiguration.getAddress(),65 (timeLeft > 0 ? endpointConfiguration.getPollingInterval() : endpointConfiguration.getPollingInterval() + timeLeft)));66 }67 try {68 Thread.sleep(timeLeft > 0 ? endpointConfiguration.getPollingInterval() : endpointConfiguration.getPollingInterval() + timeLeft);69 } catch (InterruptedException e) {70 RETRY_LOG.warn("Thread interrupted while waiting for message on Vert.x event bus", e);71 }72 message = endpointConfiguration.getMessageConverter().convertInbound(vertxMessageHandler.getMessage(), endpointConfiguration, context);73 }74 if (message == null) {75 throw new ActionTimeoutException("Action timed out while receiving message on Vert.x event bus address '" + endpointConfiguration.getAddress() + "'");76 }77 log.info("Received message on Vert.x event bus address: '" + endpointConfiguration.getAddress() + "'");78 context.onInboundMessage(message);79 return message;80 } finally {81 vertxConsumer.unregister();82 }83 }84 /**85 * Simple Vert.x message handler stores first message received on event bus and ignores all further messages86 * until subscription is unregistered automatically.87 */88 private class VertxSingleMessageHandler implements Handler<io.vertx.core.eventbus.Message<Object>> {89 private io.vertx.core.eventbus.Message message;90 @Override91 public void handle(io.vertx.core.eventbus.Message event) {92 if (message == null) {93 this.message = event;94 } else {95 log.warn("Vert.x message handler ignored message on event bus address '" + endpointConfiguration.getAddress() + "'");96 log.debug("Vert.x message ignored is " + event);97 }98 }99 /**100 * Gets the vert.x message received on event bus.101 * @return102 */103 public io.vertx.core.eventbus.Message getMessage() {104 return message;105 }106 }107}...
Source:VertxSyncConsumer.java
...49 this.endpointConfiguration = endpointConfiguration;50 this.correlationManager = new PollingCorrelationManager<>(endpointConfiguration, "Reply Vert.x address not set up yet");51 }52 @Override53 public Message receive(TestContext context, long timeout) {54 Message receivedMessage = super.receive(context, timeout);55 saveReplyDestination(receivedMessage, context);56 return receivedMessage;57 }58 @Override59 public void send(Message message, TestContext context) {60 Assert.notNull(message, "Message is empty - unable to send empty message");61 String correlationKeyName = endpointConfiguration.getCorrelator().getCorrelationKeyName(getName());62 String correlationKey = correlationManager.getCorrelationKey(correlationKeyName, context);63 String replyAddress = correlationManager.find(correlationKey, endpointConfiguration.getTimeout());64 Assert.notNull(replyAddress, "Failed to find reply address for message correlation key: '" + correlationKey + "'");65 if (log.isDebugEnabled()) {66 log.debug("Sending Vert.x message to event bus address: '" + replyAddress + "'");67 }68 vertx.eventBus().send(replyAddress, message.getPayload());69 context.onOutboundMessage(message);70 log.info("Message was sent to Vert.x event bus address: '" + replyAddress + "'");71 }72 /**73 * Store the reply address either straight forward or with a given74 * message correlation key.75 *76 * @param receivedMessage77 * @param context78 */79 public void saveReplyDestination(Message receivedMessage, TestContext context) {80 if (receivedMessage.getHeader(CitrusVertxMessageHeaders.VERTX_REPLY_ADDRESS) != null) {81 String correlationKeyName = endpointConfiguration.getCorrelator().getCorrelationKeyName(getName());82 String correlationKey = endpointConfiguration.getCorrelator().getCorrelationKey(receivedMessage);83 correlationManager.saveCorrelationKey(correlationKeyName, correlationKey, context);84 correlationManager.store(correlationKey, receivedMessage.getHeader(CitrusVertxMessageHeaders.VERTX_REPLY_ADDRESS).toString());85 } else {86 log.warn("Unable to retrieve reply address for message \n" +87 receivedMessage + "\n - no reply address found in message headers!");88 }89 }90 /**91 * Sets the correlation manager.92 * @param correlationManager93 */94 public void setCorrelationManager(CorrelationManager<String> correlationManager) {95 this.correlationManager = correlationManager;96 }97}...
receive
Using AI Code Generation
1package com.consol.citrus.samples.vertx;2import com.consol.citrus.annotations.CitrusTest;3import com.consol.citrus.dsl.junit.JUnit4CitrusTestDesigner;4import com.consol.citrus.message.MessageType;5import com.consol.citrus.vertx.endpoint.VertxEndpoint;6import com.consol.citrus.vertx.endpoint.VertxEndpointConfiguration;7import com.consol.citrus.vertx.endpoint.VertxSyncEndpoint;8import com.consol.citrus.vertx.endpoint.VertxSyncEndpointConfiguration;9import com.consol.citrus.vertx.message.VertxMessageHeaders;10import org.junit.Test;11import org.junit.runner.RunWith;12import org.springframework.beans.factory.annotation.Autowired;13import org.springframework.context.annotation.Bean;14import org.springframework.context.annotation.Configuration;15import org.springframework.test.context.ContextConfiguration;16import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;17import java.util.HashMap;18import java.util.Map;19@ContextConfiguration(classes = VertxConsumerTest.TestConfig.class)20@RunWith(SpringJUnit4ClassRunner.class)21public class VertxConsumerTest extends JUnit4CitrusTestDesigner {22 private VertxEndpoint vertxEndpoint;23 private VertxSyncEndpoint vertxSyncEndpoint;24 public void testVertxConsumer() {25 variable("vertxAddress", "test");26 receive(builder -> builder.endpoint(vertxEndpoint)27 .messageType(MessageType.PLAINTEXT)28 .payload("Hello Citrus!"));29 send(builder -> builder.endpoint(vertxSyncEndpoint)30 .messageType(MessageType.PLAINTEXT)31 .payload("Hello Citrus!"));32 }33 public static class TestConfig {34 public VertxEndpoint vertxEndpoint() {35 VertxEndpointConfiguration configuration = new VertxEndpointConfiguration();36 configuration.setAddress("test");37 return new VertxEndpoint(configuration);38 }39 public VertxSyncEndpoint vertxSyncEndpoint() {40 VertxSyncEndpointConfiguration configuration = new VertxSyncEndpointConfiguration();41 configuration.setAddress("test");42 return new VertxSyncEndpoint(configuration);43 }44 }45}46package com.consol.citrus.samples.vertx;47import com.consol.citrus.annotations.CitrusTest;
receive
Using AI Code Generation
1package com.consol.citrus;2import com.consol.citrus.annotations.CitrusTest;3import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;4import org.springframework.beans.factory.annotation.Autowired;5import org.testng.annotations.Test;6public class VertxConsumerTest extends TestNGCitrusTestDesigner {7 private VertxEndpoint vertxEndpoint;8 public void vertxConsumerTest() {9 variable("message", "Hello World!");10 receive(vertxEventBus()11 .endpoint(vertxEndpoint)12 .address("com.consol.citrus.vertx.test")13 .timeout(10000L));14 }15}16package com.consol.citrus;17import com.consol.citrus.annotations.CitrusTest;18import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;19import org.springframework.beans.factory.annotation.Autowired;20import org.testng.annotations.Test;21public class VertxConsumerTest extends TestNGCitrusTestDesigner {22 private VertxEndpoint vertxEndpoint;23 public void vertxConsumerTest() {24 variable("message", "Hello World!");25 receive(vertxEventBus()26 .endpoint(vertxEndpoint)27 .address("com.consol.citrus.vertx.test")28 .timeout(10000L)29 .messageType(MessageType.PLAINTEXT));30 }31}32package com.consol.citrus;33import com.consol.citrus.annotations.CitrusTest;34import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;35import org.springframework.beans.factory.annotation.Autowired;36import org.testng.annotations.Test;37public class VertxConsumerTest extends TestNGCitrusTestDesigner {38 private VertxEndpoint vertxEndpoint;39 public void vertxConsumerTest() {40 variable("message", "Hello World!");41 receive(vertxEventBus()42 .endpoint(vertxEndpoint)43 .address("com.consol.citrus.vertx.test")44 .timeout(10000L)45 .messageType(MessageType
receive
Using AI Code Generation
1package com.consol.citrus;2import com.consol.citrus.exceptions.CitrusRuntimeException;3import com.consol.citrus.message.Message;4import com.consol.citrus.message.MessageCorrelator;5import com.consol.citrus.message.MessageCorrelatorCallback;6import com.consol.citrus.message.MessageCorrelatorRegistry;7import com.consol.citrus.message.MessageType;8import com.consol.citrus.message.MessageTypeResolver;9import com.consol.citrus.message.MessageTypeResolverRegistry;10import com.consol.citrus.message.MessageTypeResolverUtils;11import com.consol.citrus.message.MessageValidator;12import com.consol.citrus.message.MessageValidatorRegistry;13import com.consol.citrus.message.MessageValidatorUtils;14import com.consol.citrus.message.MessageValidatorRegistry.ValidationMode;15import com.consol.citrus.message.builder.DefaultMessageBuilder;16import com.consol.citrus.message.builder.StaticMessageContentBuilder;17import com.consol.citrus.message.builder.StaticMessageHeaderBuilder;18import com.consol.citrus.message.builder.StaticMessagePayloadBuilder;19import com.consol.citrus.message.correlator.ReplyMessageCorrelator;20import com.consol.citrus.message.correlator.ReplyMessageCorrelatorCallback;21import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry;22import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorCallbackHolder;23import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorHolder;24import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorHolder.ReplyMessageCorrelatorCallbackHolderKey;25import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorHolder.ReplyMessageCorrelatorHolderKey;26import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorHolderKey;27import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorKey;28import com.consol.citrus.message.correlator.ReplyMessageCorrelatorRegistry.ReplyMessageCorrelatorKey.ReplyMessageCorrelatorCallbackHolderKey;29import com.consol.citrus
receive
Using AI Code Generation
1import com.consol.citrus.message.Message;2import com.consol.citrus.vertx.endpoint.VertxConsumer;3import com.consol.citrus.vertx.endpoint.VertxEndpointConfiguration;4import com.consol.citrus.vertx.endpoint.VertxSyncEndpoint;5import io.vertx.core.Vertx;6import io.vertx.core.VertxOptions;7import io.vertx.core.http.HttpClient;8import io.vertx.core.http.HttpClientOptions;9import io.vertx.core.http.HttpServer;10import io.vertx.core.http.HttpServerOptions;11import io.vertx.core.http.HttpServerRequest;12import io.vertx.core.net.JksOptions;13import io.vertx.core.net.PemKeyCertOptions;14import io.vertx.core.net.PemTrustOptions;15import io.vertx.core.net.PfxOptions;16import io.vertx.core.net.TrustOptions;17import io.vertx.ext.web.Router;18import io.vertx.ext.web.RoutingContext;19import io.vertx.ext.web.handler.BodyHandler;20import org.springframework.util.StringUtils;21import java.util.Optional;22public class VertxConsumerTest {23 public static void main(String[] args) {24 Vertx vertx = Vertx.vertx(new VertxOptions().setWorkerPoolSize(1));25 VertxEndpointConfiguration endpointConfiguration = new VertxEndpointConfiguration();26 endpointConfiguration.setPort(8080);27 endpointConfiguration.setHost("localhost");28 endpointConfiguration.setSsl(true);29 endpointConfiguration.setKeyStore("server-keystore.jks");30 endpointConfiguration.setKeyStorePassword("password");31 endpointConfiguration.setTrustStore("server-truststore.jks");32 endpointConfiguration.setTrustStorePassword("password");33 endpointConfiguration.setClientAuthRequired(true);34 endpointConfiguration.setClientAuth("required");35 endpointConfiguration.setProtocol("TLS");36 endpointConfiguration.setTrustStoreType("jks");37 endpointConfiguration.setKeyStoreType("jks");38 endpointConfiguration.setSslEngine("JDK");39 endpointConfiguration.setSslProvider("JDK");40 endpointConfiguration.setUseAlpn(true);41 endpointConfiguration.setUseNpn(true);42 endpointConfiguration.setUseOpenSsl(false);43 endpointConfiguration.setUseJdkSslEngine(false);44 endpointConfiguration.setSni(false);45 endpointConfiguration.setTcpKeepAlive(true);46 endpointConfiguration.setTcpNoDelay(true);47 endpointConfiguration.setTcpFastOpen(true);48 endpointConfiguration.setTcpCork(true);49 endpointConfiguration.setTcpQuickAck(true);50 endpointConfiguration.setSoLinger(1);51 endpointConfiguration.setSendBufferSize(
receive
Using AI Code Generation
1package com.consol.citrus;2import com.consol.citrus.dsl.builder.ReceiveMessageBuilder;3import com.consol.citrus.dsl.builder.SendMessageBuilder;4import com.consol.citrus.dsl.runner.TestRunner;5import com.consol.citrus.dsl.runner.TestRunnerSupport;6import com.consol.citrus.message.MessageType;7import com.consol.citrus.vertx.endpoint.VertxConsumer;8import com.consol.citrus.vertx.endpoint.VertxEndpoint;9import com.consol.citrus.vertx.endpoint.VertxEndpointConfiguration;10import com.consol.citrus.vertx.endpoint.VertxProducer;11import io.vertx.core.Vertx;12import io.vertx.core.VertxOptions;13import io.vertx.core.eventbus.EventBus;14import org.testng.annotations.Test;15import java.util.HashMap;16import java.util.Map;17import static com.consol.citrus.actions.SendMessageAction.Builder.send;18import static com.consol.citrus.container.Sequence.Builder.sequential;19import static com.consol.citrus.dsl.builder.Builder.*;20import static com.consol.citrus.vertx.endpoint.VertxEndpoint.Builder.vertx;21public class VertxConsumerTest {22 public void testVertxConsumer() {23 VertxEndpointConfiguration endpointConfiguration = new VertxEndpointConfiguration();24 endpointConfiguration.setAddress("testAddress");25 endpointConfiguration.setEndpointUri("vertx:testAddress");26 endpointConfiguration.setEventBus("eventBus");27 endpointConfiguration.setPort(8080);28 endpointConfiguration.setHost("localhost");29 endpointConfiguration.setVertx("vertx");30 endpointConfiguration.setReplyTimeout(1000);31 endpointConfiguration.setReplyAddress("replyAddress");32 endpointConfiguration.setReplyMessageType(MessageType.PLAINTEXT);33 endpointConfiguration.setReplyMessagePayload("replyMessagePayload");34 endpointConfiguration.setReplyHeaders(new HashMap<>());35 endpointConfiguration.setHeaders(new HashMap<>());36 endpointConfiguration.setPayload("payload");37 endpointConfiguration.setMessageType(MessageType.PLAINTEXT);38 endpointConfiguration.setEventBusOptions(new VertxOptions());39 endpointConfiguration.setEventBusOptionsFile("eventBusOptionsFile");40 endpointConfiguration.setEventBusOptionsJson("eventBusOptionsJson");41 endpointConfiguration.setEventBusOptionsYaml("eventBusOptionsYaml");42 endpointConfiguration.setEventBusOptionsXml("eventBusOptionsXml");43 endpointConfiguration.setEventBusOptionsData("eventBusOptionsData");44 endpointConfiguration.setEventBusOptionsResource("eventBusOptionsResource");45 endpointConfiguration.setEventBusOptionsUrl("event
receive
Using AI Code Generation
1package com.consol.citrus.samples;2import com.consol.citrus.TestAction;3import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;4import com.consol.citrus.message.MessageType;5import com.consol.citrus.vertx.endpoint.VertxConsumer;6import com.consol.citrus.vertx.endpoint.VertxEndpoint;7import com.consol.citrus.vertx.endpoint.VertxEndpointConfiguration;8import com.consol.citrus.vertx.endpoint.VertxMessageConverter;9import com.consol.citrus.vertx.message.VertxMessage;10import io.vertx.core.Vertx;11import io.vertx.core.VertxOptions;12import io.vertx.core.eventbus.EventBus;13import org.springframework.beans.factory.annotation.Autowired;14import org.springframework.beans.factory.annotation.Qualifier;15import org.testng.annotations.Test;16import java.util.HashMap;17import java.util.Map;18import static org.mockito.Mockito.mock;19import static org.mockito.Mockito.when;20public class VertxConsumerTest extends TestNGCitrusTestDesigner {21 @Qualifier("vertxEndpoint")22 private VertxEndpoint vertxEndpoint;23 public void testVertxConsumer() {24 Map<String, Object> headers = new HashMap<>();25 headers.put("foo", "bar");26 VertxMessage message = new VertxMessage();27 message.setHeaders(headers);28 message.setPayload("Hello World");29 VertxConsumer vertxConsumer = new VertxConsumer();30 vertxConsumer.setEndpoint(vertxEndpoint);31 vertxConsumer.setMessageConverter(new VertxMessageConverter());32 vertxConsumer.setEndpointConfiguration(new VertxEndpointConfiguration());33 Vertx vertx = mock(Vertx.class);34 EventBus eventBus = mock(EventBus.class);35 when(vertx.eventBus()).thenReturn(eventBus);36 vertxConsumer.setVertx(vertx);37 vertxConsumer.setAddress("testAddress");38 vertxConsumer.setHeaders(headers);39 TestAction receiveAction = receive(vertxConsumer)40 .message(message)41 .messageType(MessageType.PLAINTEXT);42 run(receiveAction);43 }44}45package com.consol.citrus.samples;46import com.consol.citrus.TestAction;47import com.consol.citrus.dsl.testng.TestNGCitrusTestDesigner;48import com.consol.citrus.message.MessageType;49import
receive
Using AI Code Generation
1package com.consol.citrus.vertx.endpoint;2import com.consol.citrus.javadsl.endpoint.CitrusEndpoints;3import com.consol.citrus.message.MessageType;4import com.consol.citrus.vertx.endpoint.VertxConsumer;5import org.springframework.context.annotation.Bean;6import org.springframework.context.annotation.Configuration;7public class VertxConsumerConfig {8 public VertxConsumer vertxConsumer() {9 return CitrusEndpoints.vertx()10 .server("vertx-server")11 .timeout(10000L)12 .messageType(MessageType.PLAINTEXT)13 .build();14 }15}16package com.consol.citrus.vertx.endpoint;17import com.consol.citrus.javadsl.endpoint.CitrusEndpoints;18import com.consol.citrus.message.MessageType;19import com.consol.citrus.vertx.endpoint.VertxProducer;20import org.springframework.context.annotation.Bean;21import org.springframework.context.annotation.Configuration;22public class VertxProducerConfig {23 public VertxProducer vertxProducer() {24 return CitrusEndpoints.vertx()25 .client("vertx-client")26 .timeout(10000L)27 .messageType(MessageType.PLAINTEXT)28 .build();29 }30}31package com.consol.citrus.vertx.endpoint;32import com.consol.citrus.javadsl.endpoint.CitrusEndpoints;33import com.consol.citrus.message.MessageType;34import com.consol.citrus.vertx.endpoint.VertxSyncProducer;35import org.springframework.context.annotation.Bean;36import org.springframework.context.annotation.Configuration;37public class VertxSyncProducerConfig {38 public VertxSyncProducer vertxSyncProducer() {39 return CitrusEndpoints.vertx()40 .syncClient("vertx-sync-client")41 .timeout(10000L)42 .messageType(MessageType.PLAINTEXT)43 .build();44 }45}46package com.consol.citrus.vertx.endpoint;47import com.consol.citrus.javadsl.endpoint.CitrusEndpoints;48import com.consol.c
receive
Using AI Code Generation
1public class VertxConsumerReceiveTest {2 private VertxClient vertxClient;3 public void testVertxConsumerReceive() {4 VertxConsumer vertxConsumer = new VertxConsumer();5 vertxConsumer.setClient(vertxClient);6 vertxConsumer.setEndpointUri("my-vertx-endpoint:consumer");7 vertxConsumer.createEndpointConfiguration();8 vertxConsumer.init();9 vertxConsumer.receive(context);10 }11}12public class VertxProducerSendTest {13 private VertxClient vertxClient;14 public void testVertxProducerSend() {15 VertxProducer vertxProducer = new VertxProducer();16 vertxProducer.setClient(vertxClient);17 vertxProducer.setEndpointUri("my-vertx-endpoint:producer");18 vertxProducer.createEndpointConfiguration();19 vertxProducer.init();20 vertxProducer.send(context);21 }22}23public class VertxConsumerSendTest {24 private VertxClient vertxClient;25 public void testVertxConsumerSend() {26 VertxConsumer vertxConsumer = new VertxConsumer();27 vertxConsumer.setClient(vertxClient);28 vertxConsumer.setEndpointUri("my-vertx-endpoint:consumer");29 vertxConsumer.createEndpointConfiguration();30 vertxConsumer.init();31 vertxConsumer.send(context);32 }33}34public class VertxProducerSendTest {35 private VertxClient vertxClient;36 public void testVertxProducerSend() {37 VertxProducer vertxProducer = new VertxProducer();38 vertxProducer.setClient(vertxClient);39 vertxProducer.setEndpointUri("my-vertx-endpoint:producer");40 vertxProducer.createEndpointConfiguration();41 vertxProducer.init();
receive
Using AI Code Generation
1public class 3 extends AbstractTestNGCitrusTest {2 public void 3() {3 variable("var", "value");4 echo("Message: ${var}");5 receive("vertxEndpoint")6 .payload("<TestRequestMessage><text>Hello Citrus!</text></TestRequestMessage>");7 }8}9public class 4 extends AbstractTestNGCitrusTest {10 public void 4() {11 variable("var", "value");12 echo("Message: ${var}");13 send("vertxEndpoint")14 .payload("<TestRequestMessage><text>Hello Citrus!</text></TestRequestMessage>");15 }16}17public class 5 extends AbstractTestNGCitrusTest {18 public void 5() {19 variable("var", "value");20 echo("Message: ${var}");21 send("vertxEndpoint")22 .payload("<TestRequestMessage><text>Hello Citrus!</text></TestRequestMessage>");23 }24}25public class 6 extends AbstractTestNGCitrusTest {26 public void 6() {27 variable("var", "value");28 echo("Message: ${var}");29 send("vertxEndpoint")30 .payload("<TestRequestMessage><text>Hello Citrus!</text></TestRequestMessage>");31 }32}33public class 7 extends AbstractTestNGCitrusTest {34 public void 7() {35 variable("var", "value");36 echo("Message: ${var}");37 send("vertxEndpoint")38 .payload("<TestRequestMessage><text>Hello Citrus!</text></TestRequestMessage>");39 }40}
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!!