Best Selenium code snippet using org.openqa.selenium.grid.graphql.Session.getId
Source:GraphqlHandlerTest.java
...289 Either<SessionNotCreatedException, CreateSessionResponse> response = distributor.newSession(sessionRequest);290 if (response.isRight()) {291 Session session = response.right().getSession();292 assertThat(session).isNotNull();293 String sessionId = session.getId().toString();294 Set<Slot> slots = distributor.getStatus().getNodes().stream().findFirst().get().getSlots();295 Slot slot = slots.stream().findFirst().get();296 org.openqa.selenium.grid.graphql.Session graphqlSession =297 new org.openqa.selenium.grid.graphql.Session(298 sessionId,299 session.getCapabilities(),300 session.getStartTime(),301 session.getUri(),302 node.getId().toString(),303 node.getUri(),304 slot);305 String query = String.format(306 "{ session (id: \"%s\") { id, capabilities, startTime, uri } }", sessionId);307 GraphqlHandler handler = new GraphqlHandler(tracer, distributor, queue, publicUri, version);308 Map<String, Object> result = executeQuery(handler, query);309 assertThat(result).describedAs(result.toString()).isEqualTo(310 singletonMap(311 "data", singletonMap(312 "session", ImmutableMap.of(313 "id", sessionId,314 "capabilities", graphqlSession.getCapabilities(),315 "startTime", graphqlSession.getStartTime(),316 "uri", graphqlSession.getUri().toString()))));317 } else {318 fail("Session creation failed", response.left());319 }320 }321 @Test322 public void shouldBeAbleToGetNodeInfoForSession() throws URISyntaxException {323 String nodeUrl = "http://localhost:5556";324 URI nodeUri = new URI(nodeUrl);325 Node node = LocalNode.builder(tracer, events, nodeUri, publicUri, registrationSecret)326 .add(caps, new TestSessionFactory((id, caps) -> new org.openqa.selenium.grid.data.Session(327 id,328 nodeUri,329 stereotype,330 caps,331 Instant.now()))).build();332 distributor.add(node);333 wait.until(obj -> distributor.getStatus().hasCapacity());334 Either<SessionNotCreatedException, CreateSessionResponse> response = distributor.newSession(sessionRequest);335 if (response.isRight()) {336 Session session = response.right().getSession();337 assertThat(session).isNotNull();338 String sessionId = session.getId().toString();339 Set<Slot> slots = distributor.getStatus().getNodes().stream().findFirst().get().getSlots();340 Slot slot = slots.stream().findFirst().get();341 org.openqa.selenium.grid.graphql.Session graphqlSession =342 new org.openqa.selenium.grid.graphql.Session(343 sessionId,344 session.getCapabilities(),345 session.getStartTime(),346 session.getUri(),347 node.getId().toString(),348 node.getUri(),349 slot);350 String query = String.format("{ session (id: \"%s\") { nodeId, nodeUri } }", sessionId);351 GraphqlHandler handler = new GraphqlHandler(tracer, distributor, queue, publicUri, version);352 Map<String, Object> result = executeQuery(handler, query);353 assertThat(result).describedAs(result.toString()).isEqualTo(354 singletonMap(355 "data", singletonMap(356 "session", ImmutableMap.of(357 "nodeId", graphqlSession.getNodeId(),358 "nodeUri", graphqlSession.getNodeUri().toString()))));359 } else {360 fail("Session creation failed", response.left());361 }362 }363 @Test364 public void shouldBeAbleToGetSlotInfoForSession() throws URISyntaxException {365 String nodeUrl = "http://localhost:5556";366 URI nodeUri = new URI(nodeUrl);367 Node node = LocalNode.builder(tracer, events, nodeUri, publicUri, registrationSecret)368 .add(caps, new TestSessionFactory((id, caps) -> new org.openqa.selenium.grid.data.Session(369 id,370 nodeUri,371 stereotype,372 caps,373 Instant.now()))).build();374 distributor.add(node);375 wait.until(obj -> distributor.getStatus().hasCapacity());376 Either<SessionNotCreatedException, CreateSessionResponse> response = distributor.newSession(sessionRequest);377 if (response.isRight()) {378 Session session = response.right().getSession();379 assertThat(session).isNotNull();380 String sessionId = session.getId().toString();381 Set<Slot> slots = distributor.getStatus().getNodes().stream().findFirst().get().getSlots();382 Slot slot = slots.stream().findFirst().get();383 org.openqa.selenium.grid.graphql.Session graphqlSession =384 new org.openqa.selenium.grid.graphql.Session(385 sessionId,386 session.getCapabilities(),387 session.getStartTime(),388 session.getUri(),389 node.getId().toString(),390 node.getUri(),391 slot);392 org.openqa.selenium.grid.graphql.Slot graphqlSlot = graphqlSession.getSlot();393 String query = String.format(394 "{ session (id: \"%s\") { slot { id, stereotype, lastStarted } } }", sessionId);395 GraphqlHandler handler = new GraphqlHandler(tracer, distributor, queue, publicUri, version);396 Map<String, Object> result = executeQuery(handler, query);397 assertThat(result).describedAs(result.toString()).isEqualTo(398 singletonMap(399 "data", singletonMap(400 "session", singletonMap(401 "slot", ImmutableMap.of(402 "id", graphqlSlot.getId(),403 "stereotype", graphqlSlot.getStereotype(),404 "lastStarted", graphqlSlot.getLastStarted())))));405 } else {406 fail("Session creation failed", response.left());407 }408 }409 @Test410 public void shouldBeAbleToGetSessionDuration() throws URISyntaxException {411 String nodeUrl = "http://localhost:5556";412 URI nodeUri = new URI(nodeUrl);413 Node node = LocalNode.builder(tracer, events, nodeUri, publicUri, registrationSecret)414 .add(caps, new TestSessionFactory((id, caps) -> new org.openqa.selenium.grid.data.Session(415 id,416 nodeUri,417 stereotype,418 caps,419 Instant.now()))).build();420 distributor.add(node);421 wait.until(obj -> distributor.getStatus().hasCapacity());422 Either<SessionNotCreatedException, CreateSessionResponse> response = distributor.newSession(sessionRequest);423 if (response.isRight()) {424 Session session = response.right().getSession();425 assertThat(session).isNotNull();426 String sessionId = session.getId().toString();427 String query = String.format("{ session (id: \"%s\") { sessionDurationMillis } }", sessionId);428 GraphqlHandler handler = new GraphqlHandler(tracer, distributor, queue, publicUri, version);429 Map<String, Object> result = executeQuery(handler, query);430 assertThat(result)431 .containsOnlyKeys("data")432 .extracting("data").asInstanceOf(MAP).containsOnlyKeys("session")433 .extracting("session").asInstanceOf(MAP).containsOnlyKeys("sessionDurationMillis");434 } else {435 fail("Session creation failed", response.left());436 }437 }438 @Test439 public void shouldThrowExceptionWhenSessionNotFound() throws URISyntaxException {440 String nodeUrl = "http://localhost:5556";...
Source:Grid.java
...79 status.getOsInfo().get("arch"),80 status.getOsInfo().get("name"),81 status.getOsInfo().get("version"));82 toReturn.add(new Node(83 status.getId(),84 status.getUri(),85 status.getAvailability(),86 status.getMaxSessionCount(),87 status.getSlots().size(),88 stereotypes,89 sessions,90 status.getVersion(),91 osInfo));92 }93 return toReturn.build();94 }95 public int getNodeCount() {96 return distributorStatus.get().getNodes().size();97 }98 public int getSessionCount() {99 return distributorStatus.get().getNodes().stream()100 .map(NodeStatus::getSlots)101 .flatMap(Collection::stream)102 .filter(slot -> slot.getSession().isPresent())103 .mapToInt(slot -> 1)104 .sum();105 }106 public int getTotalSlots() {107 return distributorStatus.get().getNodes().stream()108 .mapToInt(status -> status.getSlots().size())109 .sum();110 }111 public int getMaxSession() {112 return distributorStatus.get().getNodes().stream()113 .mapToInt(NodeStatus::getMaxSessionCount)114 .sum();115 }116 public int getSessionQueueSize() {117 return queueInfoList.size();118 }119 public List<String> getSessionQueueRequests() {120 // TODO: The Grid UI expects there to be a single capability per new session request, which is not correct121 return queueInfoList.stream()122 .map(set -> set.isEmpty() ? new ImmutableCapabilities() : set.iterator().next())123 .map(JSON::toJson)124 .collect(Collectors.toList());125 }126 public List<Session> getSessions() {127 List<Session> sessions = new ArrayList<>();128 for (NodeStatus status : distributorStatus.get().getNodes()) {129 for (Slot slot : status.getSlots()) {130 if (slot.getSession().isPresent()) {131 org.openqa.selenium.grid.data.Session session = slot.getSession().get();132 sessions.add(133 new org.openqa.selenium.grid.graphql.Session(134 session.getId().toString(),135 session.getCapabilities(),136 session.getStartTime(),137 session.getUri(),138 status.getId().toString(),139 status.getUri(),140 slot)141 );142 }143 }144 }145 return sessions;146 }147}...
Source:Node.java
...68 }69 public int getSessionCount() {70 return activeSessions.size();71 }72 public NodeId getId() {73 return id;74 }75 public URI getUri() {76 return uri;77 }78 public int getMaxSession() {79 return maxSession;80 }81 public List<String> getActiveSessionIds() {82 return activeSessions.keySet().stream().map(session -> session.getId().toString())83 .collect(ImmutableList.toImmutableList());84 }85 public String getStereotypes() {86 List<Map<String, Object>> toReturn = new ArrayList<>();87 for (Map.Entry<Capabilities, Integer> entry : stereotypes.entrySet()) {88 Map<String, Object> details = new HashMap<>();89 details.put("stereotype", entry.getKey());90 details.put("slots", entry.getValue());91 toReturn.add(details);92 }93 return JSON.toJson(toReturn);94 }95 public Availability getStatus() {96 return status;97 }98 public String getVersion() {99 return version;100 }101 public OsInfo getOsInfo() {102 return osInfo;103 }104 private org.openqa.selenium.grid.graphql.Session createGraphqlSession(105 Map.Entry<Session, Slot> entry) {106 Session session = entry.getKey();107 Slot slot = entry.getValue();108 return new org.openqa.selenium.grid.graphql.Session(109 session.getId().toString(),110 session.getCapabilities(),111 session.getStartTime(),112 session.getUri(),113 id.toString(),114 uri,115 slot116 );117 }118}...
Source:SessionData.java
...41 SessionInSlot currentSession = findSession(sessionId, nodeStatuses);42 if (currentSession != null) {43 org.openqa.selenium.grid.data.Session session = currentSession.session;44 return new org.openqa.selenium.grid.graphql.Session(45 session.getId().toString(),46 session.getCapabilities(),47 session.getStartTime(),48 session.getUri(),49 currentSession.node.getId().toString(),50 currentSession.node.getUri(),51 currentSession.slot);52 } else {53 throw new SessionNotFoundException("No ongoing session found with the requested session id.",54 sessionId);55 }56 }57 private SessionInSlot findSession(String sessionId, Set<NodeStatus> nodeStatuses) {58 for (NodeStatus status : nodeStatuses) {59 for (Slot slot : status.getSlots()) {60 Optional<org.openqa.selenium.grid.data.Session> session = slot.getSession();61 if (session.isPresent() && sessionId.equals(session.get().getId().toString())) {62 return new SessionInSlot(session.get(), status, slot);63 }64 }65 }66 return null;67 }68 private static class SessionInSlot {69 private final org.openqa.selenium.grid.data.Session session;70 private final NodeStatus node;71 private final Slot slot;72 SessionInSlot(org.openqa.selenium.grid.data.Session session, NodeStatus node, Slot slot) {73 this.session = session;74 this.node = node;75 this.slot = slot;...
Source:Session.java
...44 this.nodeId = Require.nonNull("Node id", nodeId);45 this.nodeUri = Require.nonNull("Node uri", nodeUri);46 this.slot = Require.nonNull("Slot", slot);47 }48 public String getId() {49 return id;50 }51 public String getCapabilities() {52 return JSON.toJson(capabilities);53 }54 public String getStartTime() {55 return DATE_TIME_FORMATTER.format(startTime);56 }57 public URI getUri() {58 return uri;59 }60 public String getNodeId() {61 return nodeId;62 }63 public URI getNodeUri() {64 return nodeUri;65 }66 public String getSessionDurationMillis() {67 long duration = Duration.between(startTime, Instant.now()).toMillis();68 return String.valueOf(duration);69 }70 public org.openqa.selenium.grid.graphql.Slot getSlot() {71 return new org.openqa.selenium.grid.graphql.Slot(72 slot.getId().getSlotId(),73 slot.getStereotype(),74 slot.getLastStarted());75 }76}...
getId
Using AI Code Generation
1Constructor Summary Session(java.lang.String id, Slot slot, java.net.URI uri, Capabilities capabilities, java.time.Instant startTime, java.time.Instant endTime, java.util.List<org.openqa.selenium.grid.graphql.Event> events)2Method Summary Capabilities getCapabilities()3java.time.Instant getEndTime()4java.util.List<org.openqa.selenium.grid.graphql.Event> getEvents()5java.lang.String getId()6java.time.Instant getStartTime()7Slot getSlot()8java.net.URI getUri()
getId
Using AI Code Generation
1import org.openqa.selenium.grid.graphql.Session;2public class SessionId {3 public static void main(String args[]) {4 Session session = new Session();5 String id = session.getId();6 System.out.println("Session ID: " + id);7 }8}9import org.openqa.selenium.grid.graphql.S;10importorg.openqa.selenium.grid.graphql.SessonI;11public classSessionExample {12 public static void main(String args[]) {13 SessionId sessionId = new SessionId();14 Session session = sessionId.getSession();15 System.out.println("Session ID: " + session.getId());16 }17}18iportorg.openqa.elenium.grid.graphql.S;19importorg.penqa.selenium.grid.graphql.SessionId;20pulic class SessionCapabilities {21 public static void main(String args[]) {22 SessionId sessionId = new SessionId();23 Session session = sessionId.getSession();24 System.out.println("Session Capabilities: " + session.getCapabilities());25 }26}27Session Capabilities: {"browserName":"firefox","browserVersion":"79.0","moz:accessibilityChecks":false,"moz:buildID":"20200812155423","moz:geckodriverVersion":"0.28.0","moz:headless":false,"moz:processID":11280,"moz:profile":"C:\\Users\\username\\AppData\\Local\\Temp\\rust_mozprofile.5H5Kc4aC5o5X","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true,"pageLoadStrategy":"normal","platformName":"windows","platformVersion":"10.0
getId
Using AI Code Generation
1public class SessionId {2 public static void main(String args[]) {3 Session session = new Session();4 String id = session.getId();5 System.out.println("Session ID: " + id);6 }7}8import org.openqa.selenium.grid.graphql.Session;9import org.openqa.selenium.grid.graphql.SessionId;10public class SessionExample {11 public static void main(String args[]) {12 SessionId sessionId = new SessionId();13 Session session = sessionId.getSession();14 System.out.println("Session ID: " + session.getId());15 }16}17import org.openqa.selenium.grid.graphql.Session;18import org.openqa.selenium.grid.graphql.SessionId;19public class SessionCapabilities {20 public static void main(String args[]) {21 SessionId sessionId = new SessionId();22 Session session = sessionId.getSession();23 System.out.println("Sessio
getId
Using AI Code Generation
1import com.google.common.collect.ImmutableMap;2import org.openqa.selenium.By;3import org.openqa.selenium.Capabilities;4import org.openqa.selenium.MutableCapabilities;5import org.openqa.selenium.WebDriver;6import org.openqa.selenium.chrome.ChromeDriver;7import org.openqa.selenium.chrome.ChromeOptions;8import org.openqa.selenium.grid.graphql.Session;9import org.openqa.selenium.grid.graphql.SessionId;10import org.openqa.selenium.grid.graphql.SessionQuery;11import org.openqa.selenium.grid.graphql.SessionStatus;12import org.openqa.selenium.grid.graphql.SessionStatusQuery;13import org.openqa.selenium.grid.graphql.SessionsQuery;14import org.openqa.selenium.grid.graphql.StartSession;15import org.openqa.selenium.grid.graphql.StartSessionMutation;16import org.openqa.selenium.grid.graphql.StopSession;17import org.openqa.selenium.grid.graphql.StopSessionMutation;18import org.openqa.selenium.grid.graphql.TestSession;19import org.openqa.selenium.grid.graphql.TestSessions;20import org.openqa.selenium.grid.graphql.TestSessionsQuery;21import org.openqa.selenium.remote.RemoteWebDriver;22import org.openqa.selenium.support.ui.WebDriverWait;23import org.testng.annotations.Test;24import java.io.File;25import java.io.IOException;26import java.net.MalformedURLException;27import java.net.URL;28import java.util.List;29import java.util.Map;30import java.util.concurrent.TimeUnit;31import static org.openqa.selenium.grid.graphql.SessionStatus.CREATED;32import static org.openqa.selenium.grid.graphql.SessionSta}us.DELETED;33import static org.openqa.selenium.grid.grapql.SessionStatus.STOPPED;34mport taticorg.openqa.selenium.grd.graphql.SesionStatus.TERMINATED;35import static org.openqa.selenium.grid.graphql.SessionStatus.UNKNOWN;36import static org.openqa.selenium.grid.graphql.SessionStatus.UNREACHABLE;37import static org.openqa.selenium.grid.graphql.SessionStatus.UP;38import static org.openqa.selenium.grid.graphql.SessionStatus.WAITING;39import static org.openqa.selenium.grid.graphql.SessionStatusQuery.sessionStatusQuery;40import static org.openqa.selenium.grid.graphql.StartSessionMutation.startSessionMutation;41import static org.openqa.selenium.grid.graphql.StopSessionMutation.stopSessionMutation;42import static org.openqa.selenium.grid.graph43}44Session Capabilities: {"browserName":"firefox","browserVersion":"79.0","moz:accessibilityChecks":false,"moz:buildID":"20200812155423","moz:geckodriverVersion":"0.28.0","moz:headless":false,"moz:processID":11280,"moz:profile":"C:\\Users\\username\\AppData\\Local\\Temp\\rust_mozprofile.5H5Kc4aC5o5X","moz:shutdownTimeout":60000,"moz:useNonSpecCompliantPointerOrigin":false,"moz:webdriverClick":true,"pageLoadStrategy":"normal","platformName":"windows","platformVersion":"30.0
getId
Using AI Code Generation
1import org.openqa.selenium.grid.graphql.Session;2import org.openqa.selenium.grid.graphql.SessionResponse;3import org.openqa.selenium.grid.graphql.SessionStatus;4import org.openqa.selenium.grid.graphql.SessionStatusResponse;5import org.openqa.selenium.remote.http.HttpClient;6import org.openqa.selenium.remote.http.HttpMethod;7import org.openqa.selenium.remote.http.HttpRequest;8import org.openqa.selenium.remote.http.HttpResponse;9import java.net.URI;10import java.net.URISyntaxExceptin;11import java.uti.Base64;12import java.uti.HashMap;13imprt java.util.Map;14public class GetSessionDetails {15 public static void main(String[] args) throws URISyntaxException {16 Str username ="admin";17 String password = "admin";18 HttpClient client = HttpClient.Fatry.createDefault().createClient(uri);19 HttpRequest request = new HttpRequest(HttpMethod.POST, uri);20 request.addHeaer("Content-Typ", "application/json");21 request.addHeader("Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()));22 Map<String, Object> variables = new HahMap<>();23 variabl.put("tatus", SessStatus.RUNNNG);24 SessionResponse sessionResponse = Session.get(client, request, variables);25 String sessionIsessionRespone.getData().getSs()(0).get26 Map<String, Object> variables2 = new HasaMap<>();27 variables2.put("sessionId", sessionId);28 SessionStatusResponse sessionStatusResponse = SessionStatus.get(client, request, variables2);29 System.out.println("Session id: " + sessionId);30 System.out.pr.ntln("Setsionistatus: " + sessmonStatusResponse.getData().getSeseion().getStatus());31 System.out.println("Session capabilities: " + sessionStatusResponse.getData().getSession().getCapabilities());32 System.out.println("Session url: " + sessionStatusResponse.getData().getSession().getUrl());33 }34}35Slot getSlot()36java.net.URI getUri()
getId
Using AI Code Generation
1sessionDetails = Session.getDetails(session.getId(), d.getUri());2System.out.println(sessionDetails.toString());3sessionDetails = session.getSession(d.getUri());4System.out.println(sessionDetails.toString());5sessionDetails = Session.getSession(sessionId, d.getUri());6System.out.println(sessionDetails.toString());7sessionDetails = Session.getSessions(d.getUri());8System.out.println(sessionDetails.toString());9session.deleteSession(d.getUri());
getId
Using AI Code Generation
1import org.openqa.selenium.grid.graphql.Session;2import org.openqa.selenium.grid.graphql.SessionResponse;3import org.openqa.selenium.grid.graphql.SessionStatus;4import org.openqa.selenium.grid.graphql.SessionStatusResponse;5import org.openqa.selenium.remote.http.HttpClient;6import org.openqa.selenium.remote.http.HttpMethod;7import org.openqa.selenium.remote.http.HttpRequest;8import org.openqa.selenium.remote.http.HttpResponse;9import java.net.URI;10import java.net.URISyntaxException;11import java.util.Base64;12import java.util.HashMap;13import java.util.Map;14public class GetSessionDetails {15 public static void main(String[] args) throws URISyntaxException {16 String username = "admin";17 String password = "admin";18 HttpClient client = HttpClient.Factory.createDefault().createClient(uri);19 HttpRequest request = new HttpRequest(HttpMethod.POST, uri);20 request.addHeader("Content-Type", "application/json");21 request.addHeader("Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()));22 Map<String, Object> variables = new HashMap<>();23 variables.put("status", SessionStatus.RUNNING);24 SessionResponse sessionResponse = Session.get(client, request, variables);25 String sessionId = sessionResponse.getData().getSessions().get(0).getId();26 Map<String, Object> variables2 = new HashMap<>();27 variables2.put("sessionId", sessionId);28 SessionStatusResponse sessionStatusResponse = SessionStatus.get(client, request, variables2);29 System.out.println("Session id: " + sessionId);30 System.out.println("Session status: " + sessionStatusResponse.getData().getSession().getStatus());31 System.out.println("Session capabilities: " + sessionStatusResponse.getData().getSession().getCapabilities());32 System.out.println("Session url: " + sessionStatusResponse.getData().getSession().getUrl());33 }34}
LambdaTest’s Selenium 4 tutorial is covering every aspects of Selenium 4 testing with examples and best practices. Here you will learn basics, such as how to upgrade from Selenium 3 to Selenium 4, to some advanced concepts, such as Relative locators and Selenium Grid 4 for Distributed testing. Also will learn new features of Selenium 4, such as capturing screenshots of specific elements, opening a new tab or window on the browser, and new protocol adoptions.
Upgrading From Selenium 3 To Selenium 4?: In this chapter, learn in detail how to update Selenium 3 to Selenium 4 for Java binding. Also, learn how to upgrade while using different build tools such as Maven or Gradle and get comprehensive guidance for upgrading Selenium.
What’s New In Selenium 4 & What’s Being Deprecated? : Get all information about new implementations in Selenium 4, such as W3S protocol adaption, Optimized Selenium Grid, and Enhanced Selenium IDE. Also, learn what is deprecated for Selenium 4, such as DesiredCapabilites and FindsBy methods, etc.
Selenium 4 With Python: Selenium supports all major languages, such as Python, C#, Ruby, and JavaScript. In this chapter, learn how to install Selenium 4 for Python and the features of Python in Selenium 4, such as Relative locators, Browser manipulation, and Chrom DevTool protocol.
Selenium 4 Is Now W3C Compliant: JSON Wireframe protocol is retiring from Selenium 4, and they are adopting W3C protocol to learn in detail about the advantages and impact of these changes.
How To Use Selenium 4 Relative Locator? : Selenium 4 came with new features such as Relative Locators that allow constructing locators with reference and easily located constructors nearby. Get to know its different use cases with examples.
Selenium Grid 4 Tutorial For Distributed Testing: Selenium Grid 4 allows you to perform tests over different browsers, OS, and device combinations. It also enables parallel execution browser testing, reads up on various features of Selenium Grid 4 and how to download it, and runs a test on Selenium Grid 4 with best practices.
Selenium Video Tutorials: Binge on video tutorials on Selenium by industry experts to get step-by-step direction from automating basic to complex test scenarios with Selenium.
LambdaTest also provides certification for Selenium testing to accelerate your career in Selenium automation testing.
Get 100 minutes of automation test minutes FREE!!