Best Selenium code snippet using org.openqa.selenium.devtools.Message.toString
Source:Network.java  
...87                                                         Optional<Map<String, String>> headers,88                                                         Optional<AuthChallengeResponse> authChallengeResponse) {89    Objects.requireNonNull(interceptionId, "interceptionId must be set.");90    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();91    params.put("interceptionId", interceptionId.toString());92    errorReason.ifPresent(reason -> params.put("errorReason", errorReason.get().name()));93    rawResponse.ifPresent(string -> params.put("rawResponse", rawResponse.toString()));94    url.ifPresent(string -> params.put("url", url.toString()));95    method.ifPresent(string -> params.put("method", method.toString()));96    postData.ifPresent(string -> params.put("postData", postData.toString()));97    headers.ifPresent(map -> params.put("headers", headers));98    authChallengeResponse.ifPresent(response -> params.put("authChallengeResponse", authChallengeResponse));99    return new Command<>(DOMAIN_NAME + ".continueInterceptedRequest", params.build());100  }101  /**102   * Deletes browser cookies with matching name and url or domain/path pair103   *104   * @param name   - Name of the cookies to remove105   * @param url    (Optional) - If specified, deletes all the cookies with the given name where domain and path match provided URL106   * @param domain (Optional) - If specified, deletes only cookies with the exact domain.107   * @param path   (Optional) - If specified, deletes only cookies with the exact path108   * @return DevTools Command109   */110  public static Command<Void> deleteCookies(String name, Optional<String> url,111                                            Optional<String> domain, Optional<String> path) {112    Objects.requireNonNull(name, "name must be set.");113    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();114    params.put("name", name);115    url.ifPresent(string -> params.put("url", url.toString()));116    domain.ifPresent(string -> params.put("domain", domain.toString()));117    path.ifPresent(string -> params.put("path", path.toString()));118    return new Command<>(DOMAIN_NAME + ".deleteCookies", params.build());119  }120  /**121   * Disables network tracking, prevents network events from being sent to the client.122   *123   * @return DevTools Command124   */125  public static Command<Void> disable() {126    return new Command<>(DOMAIN_NAME + ".disable", ImmutableMap.of());127  }128  /**129   * Activates emulation of network conditions.130   *131   * @param offline            - True to emulate internet disconnection.132   * @param latency            - Minimum latency from request sent to response headers received (ms).133   * @param downloadThroughput - Maximal aggregated download throughput (bytes/sec). -1 disables download throttling.134   * @param uploadThroughput   - Maximal aggregated upload throughput (bytes/sec). -1 disables upload throttling.135   * @param connectionType     (Optional) - The underlying connection technology that the browser is supposedly using.136   * @return DevTools Command137   */138  public static Command<Void> emulateNetworkConditions(boolean offline, double latency,139                                                       double downloadThroughput,140                                                       double uploadThroughput,141                                                       Optional<ConnectionType> connectionType) {142    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();143    params.put("offline", offline);144    params.put("latency", latency);145    params.put("downloadThroughput", downloadThroughput);146    params.put("uploadThroughput", uploadThroughput);147    connectionType148        .ifPresent(ConnectionType -> params.put("connectionType", connectionType.get().name()));149    return new Command<>(DOMAIN_NAME + ".emulateNetworkConditions", params.build());150  }151  /**152   * Enables network tracking, network events will now be delivered to the client.153   *154   * @param maxTotalBufferSize    (Optional) - Buffer size in bytes to use when preserving network payloads (XHRs, etc).155   * @param maxResourceBufferSize (Optional) - Per-resource buffer size in bytes to use when preserving network payloads (XHRs, etc).156   * @param maxPostDataSize       (Optional) - Longest post body size (in bytes) that would be included in requestWillBeSent notification157   * @return DevTools Command158   */159  public static Command<Void> enable(Optional<Integer> maxTotalBufferSize,160                                     Optional<Integer> maxResourceBufferSize,161                                     Optional<Integer> maxPostDataSize) {162    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();163    maxTotalBufferSize.ifPresent(integer -> params.put("maxTotalBufferSize", integer));164    maxResourceBufferSize.ifPresent(integer -> params.put("maxResourceBufferSize", integer));165    maxPostDataSize.ifPresent(integer -> params.put("maxPostDataSize", integer));166    return new Command<>(DOMAIN_NAME + ".enable", params.build());167  }168  /**169   * Returns all browser cookies. Depending on the backend support, will return detailed cookie information in the cookies field170   *171   * @return Array of Cookies with a "asSeleniumCookies" method172   */173  public static Command<Cookies> getAllCookies() {174    return new Command<>(DOMAIN_NAME + ".getAllCookies", ImmutableMap.of(),175                         map("cookies", Cookies.class));176  }177  /**178   * Returns the DER-encoded certificate (EXPERIMENTAL)179   *180   * @param origin Origin to get certificate for181   * @return List of tableNames182   */183  @Beta184  public static Command<List<String>> getCertificate(String origin) {185    Objects.requireNonNull(origin, "origin must be set.");186    return new Command<>(DOMAIN_NAME + ".getCertificate", ImmutableMap.of("origin", origin),187                         map("tableNames", new TypeToken<List<String>>() {188                         }.getType()));189  }190  /**191   * Returns all browser cookies for the current URL. Depending on the backend support, will return detailed cookie information in the cookies field192   *193   * @param urls (Optional) - The list of URLs for which applicable cookies will be fetched194   * @return Array of cookies195   */196  public static Command<Cookies> getCookies(Optional<List<String>> urls) {197    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();198    urls.ifPresent(list -> params.put("urls", urls));199    return new Command<>(DOMAIN_NAME + ".getCookies", params.build(),200                         map("cookies", Cookies.class));201  }202  /**203   * Returns content served for the given request204   *205   * @param requestId Identifier of the network request to get content for206   * @return ResponseBody object207   */208  public static Command<ResponseBody> getResponseBody(RequestId requestId) {209    Objects.requireNonNull(requestId, "requestId must be set.");210    return new Command<>(DOMAIN_NAME + ".getResponseBody",211                         ImmutableMap.of("requestId", requestId.toString()),212                         map("body", ResponseBody.class));213  }214  /**215   * Returns post data sent with the request. Returns an error when no data was sent with the request.216   *217   * @param requestId - Identifier of the network request to get content for.218   * @return DevTools Command with Request body string, omitting files from multipart requests219   */220  public static Command<String> getRequestPostData(RequestId requestId) {221    Objects.requireNonNull(requestId, "requestId must be set.");222    return new Command<>(DOMAIN_NAME + ".getRequestPostData",223                         ImmutableMap.of("requestId", requestId.toString()),224                         map("postData", String.class));225  }226  /**227   * Returns content served for the given currently intercepted request (EXPERIMENTAL)228   *229   * @param interceptionId - Identifier for the intercepted request to get body for230   * @return ResponseBody object231   */232  @Beta233  public static Command<ResponseBody> getResponseBodyForInterception(234      InterceptionId interceptionId) {235    Objects.requireNonNull(interceptionId.toString(), "interceptionId must be set.");236    return new Command<>(DOMAIN_NAME + ".getResponseBodyForInterception",237                         ImmutableMap.of("interceptionId", interceptionId),238                         map("body", ResponseBody.class));239  }240  /**241   * Returns a handle to the stream representing the response body. Note that after this command, the intercepted request can't be continued as is -- you either need to cancel it or to provide the response body.242   * The stream only supports sequential read, IO.read will fail if the position is specified (EXPERIMENTAL)243   *244   * @param interceptionId - Identifier for the intercepted request to get body for245   * @return HTTP response body Stream as a String246   */247  @Beta248  public static Command<String> takeResponseBodyForInterceptionAsStream(249      InterceptionId interceptionId) {250    Objects.requireNonNull(interceptionId, "interceptionId must be set.");251    return new Command<>(DOMAIN_NAME + ".takeResponseBodyForInterceptionAsStream",252                         ImmutableMap.of("interceptionId", interceptionId),253                         map("stream", String.class));254  }255  /**256   * @param requestId - Identifier of XHR to replay257   * @return - DevTools Command258   */259  public static Command<Void> replayXHR(RequestId requestId) {260    Objects.requireNonNull(requestId, "requestId must be set.");261    return new Command<>(DOMAIN_NAME + ".replayXHR", ImmutableMap.of("requestId", requestId.toString()));262  }263  /**264   * Searches for given string in response content (EXPERIMENTAL)265   *266   * @param requestId     - Identifier of the network response to search267   * @param query         - String to search for.268   * @param caseSensitive - If true, search is case sensitive269   * @param isRegex       - If true, treats string parameter as regex270   * @return List of SearchMatch271   */272  @Beta273  public static Command<List<SearchMatch>> searchInResponseBody(RequestId requestId, String query,274                                                                Optional<Boolean> caseSensitive,275                                                                Optional<Boolean> isRegex) {276    Objects.requireNonNull(requestId, "requestId must be set.");277    Objects.requireNonNull(query, "query must be set.");278    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();279    params.put("requestId", requestId.toString());280    params.put("query", query);281    caseSensitive.ifPresent(bool -> params.put("caseSensitive", caseSensitive));282    isRegex.ifPresent(bool -> params.put("isRegex", isRegex));283    return new Command<>(DOMAIN_NAME + ".searchInResponseBody", params.build(),284                         map("result", new TypeToken<List<SearchMatch>>() {285                         }.getType()));286  }287  /**288   * Blocks URLs from loading (EXPERIMENTAL)289   *290   * @param urls - URL patterns to block. Wildcards ('*') are allowed.291   * @return DevTools Command292   */293  @Beta294  public static Command<Void> setBlockedURLs(List<String> urls) {295    Objects.requireNonNull(urls, "urls must be set.");296    return new Command<>(DOMAIN_NAME + ".setBlockedURLs", ImmutableMap.of("urls", urls));297  }298  /**299   * Toggles ignoring of service worker for each request. (EXPERIMENTAL)300   *301   * @param bypass - Bypass service worker and load from network302   * @return - DevTools Command303   */304  @Beta305  public static Command<Void> setBypassServiceWorker(boolean bypass) {306    return new Command<>(DOMAIN_NAME + ".setBypassServiceWorker",307                         ImmutableMap.of("bypass", bypass));308  }309  /**310   * Toggles ignoring cache for each request. If true, cache will not be used.311   *312   * @param cacheDisabled - Cache disabled state.313   * @return DevTools Command314   */315  public static Command<Void> setCacheDisabled(boolean cacheDisabled) {316    return new Command<>(DOMAIN_NAME + ".setCacheDisabled",317                         ImmutableMap.of("cacheDisabled", cacheDisabled));318  }319  /**320   * implementation using CDP Cookie321   */322  private static Command<Boolean> setCookie(Cookie cookie, Optional<String> url) {323    Objects.requireNonNull(cookie.getName(), "cookieName must be set.");324    Objects.requireNonNull(cookie.getValue(), "cookieValue must be set.");325    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();326    params.put("name", cookie.getName());327    params.put("value", cookie.getValue());328    url.ifPresent(string -> params.put("url", url.toString()));329    if (cookie.getDomain() != null) {330      params.put("domain", cookie.getDomain());331    }332    if (cookie.getPath() != null) {333      params.put("path", cookie.getPath());334    }335    params.put("secure", cookie.isSecure());336    params.put("httpOnly", cookie.isHttpOnly());337    if (cookie.getExpires() != 0) {338      params.put("expires", cookie.getExpires());339    }340    return new Command<>(DOMAIN_NAME + ".setCookie", params.build(), map("success", Boolean.class));341  }342  /**343   * Sets a cookie with the given cookie data; may overwrite equivalent cookies if they exist344   *345   * @param cookie - Cookie object where Name and Value are mandatory346   * @param url    - The request-URI to associate with the setting of the cookie. This value can affect the default domain and path values of the created cookie347   * @return - Boolean348   */349  public static Command<Boolean> setCookie(org.openqa.selenium.Cookie cookie,350                                           Optional<String> url) {351    return setCookie(Cookie.fromSeleniumCookie(cookie), url);352  }353  /**354   * (EXPERIMENTAL)355   *356   * @param maxTotalSize    - Maximum total buffer size357   * @param maxResourceSize - Maximum per-resource size358   * @return DevTools Command359   */360  @Beta361  public static Command<Void> setDataSizeLimitsForTest(int maxTotalSize, int maxResourceSize) {362    return new Command<>(DOMAIN_NAME + ".setDataSizeLimitsForTest", ImmutableMap363        .of("maxTotalSize", maxTotalSize, "maxResourceSize", maxResourceSize));364  }365  /**366   * Specifies whether to always send extra HTTP headers with the requests from this page.367   *368   * @param headers - Map with extra HTTP headers.369   * @return DevTools Command370   */371  public static Command<Void> setExtraHTTPHeaders(Map<String, String> headers) {372    Objects.requireNonNull(headers, "headers must be set.");373    return new Command<>(DOMAIN_NAME + ".setExtraHTTPHeaders", ImmutableMap.of("headers", headers));374  }375  /**376   * Sets the requests to intercept that match the provided patterns and optionally resource types (EXPERIMENTAL)377   *378   * @param patterns - Requests matching any of these patterns will be forwarded and wait for the corresponding continueInterceptedRequest call.379   * @return DevTools Command380   */381  @Beta382  public static Command<Void> setRequestInterception(List<RequestPattern> patterns) {383    Objects.requireNonNull(patterns, "patterns must be set.");384    return new Command<>(DOMAIN_NAME + ".setRequestInterception",385                         ImmutableMap.of("patterns", patterns));386  }387  /**388   * Allows overriding user agent with the given string389   *390   * @param userAgent      - User agent to use391   * @param acceptLanguage - Browser langugage to emulate392   * @param platform       - The platform navigator.platform should return393   * @return DevTools Command394   */395  public static Command<Void> setUserAgentOverride(String userAgent,396                                                   Optional<String> acceptLanguage,397                                                   Optional<String> platform) {398    Objects.requireNonNull(userAgent, "userAgent must be set.");399    final ImmutableMap.Builder<String, Object> params = ImmutableMap.builder();400    params.put("userAgent", userAgent);401    acceptLanguage.ifPresent(string -> params.put("acceptLanguage", acceptLanguage.toString()));402    platform.ifPresent(string -> params.put("platform", platform.toString()));403    return new Command<>(DOMAIN_NAME + ".setUserAgentOverride", params.build());404  }405  /**406   * Fired when data chunk was received over the network.407   *408   * @return DataReceived Event409   */410  public static Event<DataReceived> dataReceived() {411    return new Event<>(DOMAIN_NAME + ".dataReceived", map("requestId", DataReceived.class));412  }413  /**414   * Fired when EventSource message is received415   *416   * @return EventSourceMessageReceived Event...Source:ChromeDevToolsTest.java  
...81				.setProperty("webdriver.chrome.driver",82						Paths.get(System.getProperty("user.home"))83								.resolve("Downloads").resolve(osName.equals("windows")84										? "chromedriver.exe" : "chromedriver")85								.toAbsolutePath().toString());86		if (runHeadless) {87			ChromeOptions options = new ChromeOptions();88			options.addArguments("--headless", "--disable-gpu");89			driver = new ChromeDriver(options);90		} else {91			driver = new ChromeDriver();92		}93		Utils.setDriver(driver);94		chromeDevTools = ((HasDevTools) driver).getDevTools();95		// https://www.baeldung.com/java-static-default-methods#:~:text=Why%20Default%20Methods%20in%20Interfaces,and%20they%20provide%20an%20implementation96		chromeDevTools.createSession();97	}98	@BeforeClass99	// https://chromedevtools.github.io/devtools-protocol/tot/Console#method-enable100	// https://chromedevtools.github.io/devtools-protocol/tot/Log#method-enable101	public static void beforeClass() throws Exception {102		// NOTE:103		// the github location of package org.openqa.selenium.devtools.console104		// is uncertain105		// enable Console106		// chromeDevTools.send(Log.enable());107		// add event listener to show in host console the browser console message108		// chromeDevTools.addListener(Log.entryAdded(), System.err::println);109		driver.get(baseURL);110	}111	@AfterClass112	public static void tearDown() {113		if (driver != null) {114			driver.quit();115		}116	}117	// @Ignore118	@Test119	// https://chromedevtools.github.io/devtools-protocol/tot/Console#event-messageAdded120	// https://chromedevtools.github.io/devtools-protocol/tot/Log#event-entryAdded121	// https://chromedevtools.github.io/devtools-protocol/tot/Log#type-LogEntry122	public void consoleMessageAddTest() {123		// Assert124		final String consoleMessage = "message from the test";125		// add event listener to verify the console message text126		chromeDevTools.addListener(Log.entryAdded(),127				o -> Assert.assertEquals(true, o.getText().equals(consoleMessage)));128		// Act129		// write console message by executing Javascript130		Utils.executeScript("console.log('" + consoleMessage + "');");131		System.err132				.println("Successfully captured console log messge: " + consoleMessage);133	}134	@Test135	// https://chromedevtools.github.io/devtools-protocol/tot/Browser#method-getWindowForTarget136	public void broserGetWindowBoundsTest() {137		GetWindowForTargetResponse response = chromeDevTools138				.send(Browser.getWindowForTarget(Optional.empty()));139		WindowID windowId = response.getWindowId();140		Bounds bounds = response.getBounds();141		System.err.println(String.format(142				"Method Browser.getWindowForTarget result: windowId: %d"143						+ "\nBounds: top: %d, left: %d, width: %d, height: %d",144				Long.parseLong(windowId.toString()), bounds.getLeft().get(),145				bounds.getTop().get(), bounds.getWidth().get(),146				bounds.getHeight().get()));147		@SuppressWarnings("unused")148		Optional<WindowID> windowIdArg = Optional.of(windowId);149		try {150			bounds = chromeDevTools.send(Browser.getWindowBounds(windowId));151			chromeDevTools.createSessionIfThereIsNotOne();152			@SuppressWarnings("unused")153			SessionID id = chromeDevTools.getCdpSession();154		} catch (TimeoutException e) {155			System.err.println("Exception (ignored): " + e.toString());156			bounds = null;157		}158		// https://github.com/SeleniumHQ/selenium/issues/7369159		chromeDevTools.send(160				Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));161		// https://github.com/SeleniumHQ/selenium/blob/master/java/client/src/org/openqa/selenium/devtools/DevTools.java162		// https://github.com/SeleniumHQ/selenium/blob/master/java/client/test/org/openqa/selenium/devtools/ChromeDevToolsNetworkTest.java163		// but Browser has no events, Network has164		chromeDevTools.addListener(Network.dataReceived(), o -> {165			Assert.assertNotNull(o.getRequestId());166			// TODO: Command<GetResponseBodyResponse> - get something practical167			System.err.println("Response body: "168					+ Network.getResponseBody(o.getRequestId()).getMethod());169		});170		driver.get("https://apache.org");171		if (bounds != null) {172			System.err.print(String.format("Method Browser.getWindowBounds(%d): ",173					Long.parseLong(windowId.toString())));174			if (bounds.getTop().isPresent()) {175				System.err176						.println(String.format("top: %d, left: %d, width: %d, height: %d",177								bounds.getTop().get(), bounds.getLeft().get(),178								bounds.getWidth().get(), bounds.getHeight().get()));179			} else {180				System.err.println("undefined");181			}182		} else {183			System.err.println("Method Browser.getWindowBounds failed");184		}185	}186	// https://stackoverflow.com/questions/60409219/how-do-you-disable-navigator-webdriver-in-chromedriver187	// https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.js...Source:Selenium4CDPTest.java  
...106	public void setUp() {107		System.setProperty("webdriver.chrome.driver",108				System.getProperty("os.name").toLowerCase().contains("windows")109						? Paths.get(System.getProperty("user.home")).resolve("Downloads")110								.resolve("chromedriver.exe").toAbsolutePath().toString()111						: new File("/usr/local/chromedriver").exists()112								? "/usr/local/chromedriver"113								: Paths.get(System.getProperty("user.home"))114										.resolve("Downloads").resolve("chromedriver")115										.toAbsolutePath().toString());116		driver = new ChromeDriver();117		devTools = driver.getDevTools();118	}119	public void waitForWebsiteToLoad() {120		Utils.getInstance().waitFor(100);121	}122}...Source:V89Events.java  
...56  protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {57    long ts = new BigDecimal(event.getTimestamp().toJson()).longValue();58    List<Object> modifiedArgs = event.getArgs().stream()59      .map(obj -> new RemoteObject(60        obj.getType().toString(),61        obj.getValue().orElse(null)))62      .collect(ImmutableList.toImmutableList());63    return new ConsoleEvent(64      event.getType().toString(),65      Instant.ofEpochMilli(ts),66      modifiedArgs);67  }68  @Override69  protected JavascriptException toJsException(ExceptionThrown event) {70    ExceptionDetails details = event.getExceptionDetails();71    Optional<StackTrace> maybeTrace = details.getStackTrace();72    Optional<org.openqa.selenium.devtools.v89.runtime.model.RemoteObject>73      maybeException = details.getException();74    String message = maybeException75      .flatMap(obj -> obj.getDescription().map(String::toString))76      .orElseGet(details::getText);77    JavascriptException exception = new JavascriptException(message);78    if (!maybeTrace.isPresent()) {79      StackTraceElement element = new StackTraceElement(80        "unknown",81        "unknown",82        details.getUrl().orElse("unknown"),83        details.getLineNumber());84      exception.setStackTrace(new StackTraceElement[]{element});85      return exception;86    }87    StackTrace trace = maybeTrace.get();88    exception.setStackTrace(trace.getCallFrames().stream()89      .map(frame -> new StackTraceElement(...Source:V88Events.java  
...56  protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {57    long ts = new BigDecimal(event.getTimestamp().toJson()).longValue();58    List<Object> modifiedArgs = event.getArgs().stream()59      .map(obj -> new RemoteObject(60        obj.getType().toString(),61        obj.getValue().orElse(null)))62      .collect(ImmutableList.toImmutableList());63    return new ConsoleEvent(64      event.getType().toString(),65      Instant.ofEpochMilli(ts),66      modifiedArgs);67  }68  @Override69  protected JavascriptException toJsException(ExceptionThrown event) {70    ExceptionDetails details = event.getExceptionDetails();71    Optional<StackTrace> maybeTrace = details.getStackTrace();72    Optional<org.openqa.selenium.devtools.v88.runtime.model.RemoteObject>73      maybeException = details.getException();74    String message = maybeException75      .flatMap(obj -> obj.getDescription().map(String::toString))76      .orElseGet(details::getText);77    JavascriptException exception = new JavascriptException(message);78    if (!maybeTrace.isPresent()) {79      StackTraceElement element = new StackTraceElement(80        "unknown",81        "unknown",82        details.getUrl().orElse("unknown"),83        details.getLineNumber());84      exception.setStackTrace(new StackTraceElement[]{element});85      return exception;86    }87    StackTrace trace = maybeTrace.get();88    exception.setStackTrace(trace.getCallFrames().stream()89      .map(frame -> new StackTraceElement(...Source:V90Events.java  
...56  protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {57    long ts = new BigDecimal(event.getTimestamp().toJson()).longValue();58    List<Object> modifiedArgs = event.getArgs().stream()59      .map(obj -> new RemoteObject(60        obj.getType().toString(),61        obj.getValue().orElse(null)))62      .collect(ImmutableList.toImmutableList());63    return new ConsoleEvent(64      event.getType().toString(),65      Instant.ofEpochMilli(ts),66      modifiedArgs);67  }68  @Override69  protected JavascriptException toJsException(ExceptionThrown event) {70    ExceptionDetails details = event.getExceptionDetails();71    Optional<StackTrace> maybeTrace = details.getStackTrace();72    Optional<org.openqa.selenium.devtools.v90.runtime.model.RemoteObject>73      maybeException = details.getException();74    String message = maybeException75      .flatMap(obj -> obj.getDescription().map(String::toString))76      .orElseGet(details::getText);77    JavascriptException exception = new JavascriptException(message);78    if (!maybeTrace.isPresent()) {79      StackTraceElement element = new StackTraceElement(80        "unknown",81        "unknown",82        details.getUrl().orElse("unknown"),83        details.getLineNumber());84      exception.setStackTrace(new StackTraceElement[]{element});85      return exception;86    }87    StackTrace trace = maybeTrace.get();88    exception.setStackTrace(trace.getCallFrames().stream()89      .map(frame -> new StackTraceElement(...Source:V85Events.java  
...56  protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {57    long ts = new BigDecimal(event.getTimestamp().toJson()).longValue();58    List<Object> modifiedArgs = event.getArgs().stream()59      .map(obj -> new RemoteObject(60        obj.getType().toString(),61        obj.getValue().orElse(null)))62      .collect(ImmutableList.toImmutableList());63    return new ConsoleEvent(64      event.getType().toString(),65      Instant.ofEpochMilli(ts),66      modifiedArgs);67  }68  @Override69  protected JavascriptException toJsException(ExceptionThrown event) {70    ExceptionDetails details = event.getExceptionDetails();71    Optional<StackTrace> maybeTrace = details.getStackTrace();72    Optional<org.openqa.selenium.devtools.v85.runtime.model.RemoteObject>73      maybeException = details.getException();74    String message = maybeException75      .flatMap(obj -> obj.getDescription().map(String::toString))76      .orElseGet(details::getText);77    JavascriptException exception = new JavascriptException(message);78    if (!maybeTrace.isPresent()) {79      StackTraceElement element = new StackTraceElement(80        "unknown",81        "unknown",82        details.getUrl().orElse("unknown"),83        details.getLineNumber());84      exception.setStackTrace(new StackTraceElement[]{element});85      return exception;86    }87    StackTrace trace = maybeTrace.get();88    exception.setStackTrace(trace.getCallFrames().stream()89      .map(frame -> new StackTraceElement(...Source:V91Events.java  
...56  protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) {57    long ts = new BigDecimal(event.getTimestamp().toJson()).longValue();58    List<Object> modifiedArgs = event.getArgs().stream()59      .map(obj -> new RemoteObject(60        obj.getType().toString(),61        obj.getValue().orElse(null)))62      .collect(ImmutableList.toImmutableList());63    return new ConsoleEvent(64      event.getType().toString(),65      Instant.ofEpochMilli(ts),66      modifiedArgs);67  }68  @Override69  protected JavascriptException toJsException(ExceptionThrown event) {70    ExceptionDetails details = event.getExceptionDetails();71    Optional<StackTrace> maybeTrace = details.getStackTrace();72    Optional<org.openqa.selenium.devtools.v91.runtime.model.RemoteObject>73      maybeException = details.getException();74    String message = maybeException75      .flatMap(obj -> obj.getDescription().map(String::toString))76      .orElseGet(details::getText);77    JavascriptException exception = new JavascriptException(message);78    if (!maybeTrace.isPresent()) {79      StackTraceElement element = new StackTraceElement(80        "unknown",81        "unknown",82        details.getUrl().orElse("unknown"),83        details.getLineNumber());84      exception.setStackTrace(new StackTraceElement[]{element});85      return exception;86    }87    StackTrace trace = maybeTrace.get();88    exception.setStackTrace(trace.getCallFrames().stream()89      .map(frame -> new StackTraceElement(...toString
Using AI Code Generation
1import org.openqa.selenium.devtools.DevTools;2import org.openqa.selenium.devtools.v91.browser.Browser;3import org.openqa.selenium.devtools.v91.browser.model.Bounds;4import org.openqa.selenium.devtools.v91.browser.model.WindowState;5import org.openqa.selenium.devtools.v91.log.Log;6import org.openqa.selenium.devtools.v91.log.model.LogEntry;7import org.openqa.selenium.devtools.v91.log.model.LogEntryAdded;8import org.openqa.selenium.devtools.v91.network.Network;9import org.openqa.selenium.devtools.v91.network.model.ConnectionType;10import org.openqa.selenium.devtools.v91.network.model.Request;11import org.openqa.selenium.devtools.v91.network.model.ResourceType;12import org.openqa.selenium.devtools.v91.network.model.Response;13import org.openqa.selenium.devtools.v91.page.Page;14import org.openqa.selenium.devtools.v91.page.model.FrameId;15import org.openqa.selenium.devtools.v91.page.model.FrameResourceTree;16import org.openqa.selenium.devtools.v91.page.model.FrameResourceTreeAdded;17import org.openqa.selenium.devtools.v91.page.model.FrameResourceTreeRemoved;18import org.openqa.selenium.devtools.v91.page.model.FrameStartedLoading;19import org.openqa.selenium.devtools.v91.page.model.FrameStoppedLoading;20import org.openqa.selenium.devtools.v91.page.model.InterstitialHidden;21import org.openqa.selenium.devtools.v91.page.model.InterstitialShown;22import org.openqa.selenium.devtools.v91.page.model.LifecycleEvent;23import org.openqa.selenium.devtools.v91.page.model.LoadingFailed;24import org.openqa.selenium.devtools.v91.page.model.LoadingFinished;25import org.openqa.selenium.devtools.v91.page.model.NavigationEntryCommitted;26import org.openqa.selenium.devtools.v91.page.model.ScreencastFrame;27import org.openqa.selenium.devtools.v91.page.model.ScreencastVisibilityChanged;28import org.openqa.selenium.devtools.v91.page.model.Viewport;29import org.openqa.selenium.devtools.v91.runtime.Runtime;30import org.openqa.selenium.devtools.v91.runtime.model.RemoteObject;31import org.openqa.selenium.devtools.v91.runtime.model.ScriptId;32import org.openqa.selenium.devtools.v91.runtime.model.StackTrace;33import org.openqa.selenium.devtools.v91.runtime.model.StackTraceId;34import org.openqa.selenium.devtools.v91.runtime.model.ExceptionDetails;35import org.openqa.selenium.devtools.v91.runtime.model.CallFrame;36import org.openqa.selenium.devtools.v91.runtime.model.CallArgument;37import org.openqa.selenium.devtools.v91.runtime.model.ExceptionThrown;38import org.openqa.selenium.devtools.v91.runtime.model.ConsoleAPtoString
Using AI Code Generation
1import org.openqa.selenium.devtools.DevTools;2import org.openqa.selenium.devtools.v91.page.Page;3import org.openqa.selenium.devtools.v91.network.Network;4import org.openqa.selenium.devtools.v91.network.model.ConnectionType;5import org.openqa.selenium.devtools.v91.network.model.Headers;6import org.openqa.selenium.devtools.v91.network.model.Request;7import org.openqa.selenium.devtools.v91.network.model.Response;8import org.openqa.selenium.devtools.v91.network.model.ResourceType;9import org.openqa.selenium.devtools.v91.network.model.RequestPattern;10import org.openqa.selenium.devtools.v91.network.model.InterceptionId;11import org.openqa.selenium.devtools.v91.network.model.AuthChallengeResponse;12import org.openqa.selenium.devtools.v91.network.model.AuthChallenge;13import org.openqa.selenium.devtools.v91.network.model.ErrorReason;14import org.openqa.selenium.devtools.v91.network.model.BlockedReason;15import org.openqa.selenium.devtools.v91.network.model.CertificateErrorAction;16import org.openqa.selenium.devtools.v91.network.model.CertificateErrorEvent;17import org.openqa.selenium.devtools.v91.network.model.InterceptionStage;18import org.openqa.selenium.devtools.v91.network.model.RequestId;19import org.openqa.selenium.devtools.v91.network.model.ErrorReason;20import org.openqa.selenium.devtools.v91.network.model.InterceptionId;21import org.openqa.selenium.devtools.v91.network.model.Request;22import org.openqa.selenium.devtools.v91.network.model.Response;23import org.openqa.selenium.devtools.v91.network.model.ResourceType;24import org.openqa.selenium.devtools.v91.network.model.RequestPattern;25import org.openqa.selenium.devtools.v91.network.model.AuthChallengeResponse;26import org.openqa.selenium.devtools.v91.network.model.AuthChallenge;27import org.openqa.selenium.devtools.v91.network.model.CertificateErrorAction;28import org.openqa.selenium.devtools.v91.network.model.CertificateErrorEvent;29import org.openqa.selenium.devtools.v91.network.model.InterceptionStage;30import org.openqa.selenium.devtools.v91.network.model.RequestId;31import org.openqa.selenium.devtools.v91.page.model.FrameId;32import org.openqa.selenium.devtools.v91.page.model.FrameResourceTree;33import org.openqa.selenium.devtools.v91.page.model.FrameResource;34import org.openqa.selenium.devtools.v91.page.model.Frame;35import org.openqa.selenium.devtools.v91.page.model.FrameResource;36import org.openqa.selenium.devtools.v91.page.model.FrameResourceTree;37import org.openqa.selenium.devtools.v91.page.model.Frame;38import org.openqa.selenium.devtools.v91.page.model.FrameId;39import orgtoString
Using AI Code Generation
1import org.openqa.selenium.devtools.Message;2import org.openqa.selenium.devtools.v91.log.Log;3import org.openqa.selenium.devtools.v91.log.model.LogEntry;4import org.openqa.selenium.devtools.v91.network.Network;5import org.openqa.selenium.devtools.v91.network.model.Request;6import org.openqa.selenium.devtools.v91.network.model.Response;7import org.openqa.selenium.devtools.v91.network.model.RequestPattern;8import org.openqa.selenium.devtools.v91.network.model.ResourceType;9import org.openqa.selenium.devtools.v91.network.model.RequestWillBeSentParameters;10import org.openqa.selenium.devtools.v91.network.model.ResponseReceivedParameters;11import org.openqa.selenium.devtools.v91.network.model.RequestId;12import org.openqa.selenium.devtools.v91.network.model.InterceptionId;13import org.openqa.selenium.devtools.v91.network.model.BlockedReason;14import org.openqa.selenium.devtools.v91.network.model.ErrorReason;15import org.openqa.selenium.devtools.v91.network.model.AuthChallenge;16import org.openqa.selenium.devtools.v91.network.model.InterceptionStage;17import org.openqa.selenium.devtools.v91.network.model.CachedResource;18import org.openqa.selenium.devtools.v91.network.model.ConnectionType;19import org.openqa.selenium.devtools.v91.network.model.Initiator;20import org.openqa.selenium.devtools.v91.network.model.LoadFailedReason;21import org.openqa.selenium.devtools.v91.network.model.LoaderId;22import org.openqa.selenium.devtools.v91.network.model.MixedContentType;23import org.openqa.selenium.devtools.v91.network.model.RequestId;24import org.openqa.selenium.devtools.v91.network.model.ResourcePriority;25import org.openqa.selenium.devtools.v91.network.model.ResourceTiming;26import org.openqa.selenium.devtools.v91.network.model.Response;27import org.openqa.selenium.devtools.v91.network.model.ResponseReceivedParameters;28import org.openqa.selenium.devtools.v91.network.model.SignedExchangeError;29import org.openqa.selenium.devtools.v91.network.model.SignedExchangeInfo;30import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;31import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;32import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;33import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;34import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;35import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;36import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;37import org.openqa.selenium.devtools.v91.network.model.TimeSinceEpoch;toString
Using AI Code Generation
1import org.openqa.selenium.devtools.DevTools;2import org.openqa.selenium.devtools.Event;3import org.openqa.selenium.devtools.Message;4import org.openqa.selenium.devtools.v91.browser.Browser;5import org.openqa.selenium.devtools.v91.browser.model.BrowserContextID;6import org.openqa.selenium.devtools.v91.browser.model.BrowserContextInfo;7import org.openqa.selenium.devtools.v91.browser.model.BrowserInfo;8import org.openqa.selenium.devtools.v91.browser.model.BrowserVersion;9import org.openqa.selenium.devtools.v91.browser.model.ContextCreated;10import org.openqa.selenium.devtools.v91.browser.model.ContextDestroyed;11import org.openqa.selenium.devtools.v91.browser.model.GetBrowserCommandLine;12import org.openqa.selenium.devtools.v91.browser.model.GetBrowserInfo;13import org.openqa.selenium.devtools.v91.browser.model.GetHistograms;14import org.openqa.selenium.devtools.v91.browser.model.GetHistogramsResponse;15import org.openqa.selenium.devtools.v91.browser.model.GetVersion;16import org.openqa.selenium.devtools.v91.browser.model.GetWindowBounds;17import org.openqa.selenium.devtools.v91.browser.model.GetWindowBoundsResponse;18import org.openqa.selenium.devtools.v91.browser.model.GetWindowForTarget;19import org.openqa.selenium.devtools.v91.browser.model.GetWindowForTargetResponse;20import org.openqa.selenium.devtools.v91.browser.model.GetWindowBoundsResponse.Bounds;21import org.openqa.selenium.devtools.v91.browser.model.SetWindowBounds;22import org.openqa.selenium.devtools.v91.browser.model.WindowID;23import org.openqa.selenium.devtools.v91.browser.model.WindowState;24import org.openqa.selenium.devtools.v91.page.Page;25import org.openqa.selenium.devtools.v91.page.model.FrameID;26import org.openqa.selenium.devtools.v91.page.model.FrameNavigated;27import org.openqa.selenium.devtools.v91.page.model.FrameStartedLoading;28import org.openqa.selenium.devtools.v91.page.model.FrameStoppedLoading;29import org.openqa.selenium.devtools.v91.page.model.FrameTree;30import org.openqa.selenium.devtools.v91.page.model.FrameTree.Frame;31import org.openqa.selenium.devtools.v91.page.model.FrameTree.Node;32import org.openqa.selenium.devtools.v91.page.model.FrameTree.ResourceTree;33import org.openqa.selenium.devtools.v91.page.model.FrameTree.ResourceTree.ChildFrame;34import org.openqa.selenium.devtools.v91.page.model.FrameTree.ResourceTree.FrameResource;35import org.openqa.selenium.devtools.v91.page.model.FrameTree.ResourceTree.SubResource;36import org.openqa.selenium.devLambdaTest’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!!
