Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In Java, use Selenium’s JavascriptExecutor interface to run JavaScript in the browser’s currently selected frame or window. Cast your WebDriver to the interface, then call executeScript for a synchronous result or executeAsyncScript when the script signals completion through Selenium’s callback. Switch to the intended frame before executing, and set a suitable script timeout for asynchronous work.

What is JavascriptExecutor in Selenium?

JavascriptExecutor is a Java interface implemented by WebDriver drivers that support executing JavaScript. Selenium’s Java API documentation describes it as an interface that “indicates that a driver can execute JavaScript, providing access to the mechanism to do so.” Known implementing classes include ChromeDriver, ChromiumDriver, EdgeDriver, FirefoxDriver, InternetExplorerDriver, RemoteWebDriver, and SafariDriver.

Use it when a test needs to run a browser-side script, pass WebDriver objects into that script, or retrieve a value from the page. It is not a reason to replace ordinary WebDriver interactions wholesale: a script-driven click demonstrates how to execute JavaScript, but it does not necessarily represent the same interaction as a user clicking an element through WebDriver.

How do I use JavascriptExecutor in Selenium?

Cast the WebDriver instance to JavascriptExecutor, then provide the JavaScript source and any arguments. This example follows Selenium’s WebDriver interaction documentation:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
JavascriptExecutor js = (JavascriptExecutor) driver;
WebElement button = driver.findElement(By.name("btnLogin"));
js.executeScript("arguments[0].click();", button);
String text = (String) js.executeScript("return arguments[0].innerText", button);

The first call passes the located WebElement into the script as arguments[0] and invokes its click() method. The second returns the element’s innerText, which Java receives as a string. The example assumes driver is an initialized WebDriver and the named element exists in the currently selected browsing context.

Pass arguments instead of building script strings

Arguments supplied after the script are available through JavaScript’s arguments object. Pass elements and values this way rather than concatenating dynamic data into JavaScript source. Selenium supports values such as primitive types, WebElements, and lists of supported values across the WebDriver boundary.

Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Return a value from executeScript

Use JavaScript’s return statement to produce a result. Selenium converts returned HTML elements to WebElement objects and converts supported numbers, booleans, strings, lists, and maps to corresponding Java values. If the script returns no value or returns null, the Java result is null. Cast or otherwise handle the value according to the type the script returns.

executeScript vs. executeAsyncScript

Method How it completes How it returns a result Timeout consideration
executeScript Runs synchronously; Selenium returns when the script completes. The script’s return value is converted to a Java value. Does not use the async script callback mechanism.
executeAsyncScript Runs until the script calls Selenium’s injected callback. The callback’s first argument becomes the result. Set an appropriate script timeout beforehand; the Java API documents a default of 0 ms.

Both methods execute in the currently selected frame or window and accept supported arguments. The key distinction is how completion is reported: an asynchronous script must call its callback, whereas a synchronous script returns through the normal JavaScript result.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

Run an asynchronous script

Selenium appends its callback after the arguments you provide. Retrieve it as the last entry in JavaScript’s arguments array and call it when the asynchronous operation is finished:

JavascriptExecutor js = (JavascriptExecutor) driver;
driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(10));

String result = (String) js.executeAsyncScript(
    "const callback = arguments[arguments.length - 1];"
        + "setTimeout(() => callback('done'), 1000);"
);

This example uses Duration for the timeout value; the exact method signature and duration style can depend on the Selenium version installed. Consult that version’s API documentation if the code does not match your project. Choose a timeout that fits the operation: if the script does not call back before the timeout, Selenium cannot treat the asynchronous execution as complete.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

Which frame or window does the script run in?

The script runs in the currently selected browsing context, not an arbitrary page or frame. In script code, document refers to the document for that selected frame or window. If the target element is inside an iframe, switch to that frame before calling executeScript; switch back to the parent context when finished if later test steps need it.

JavaScript may also be constrained by browser cross-origin rules. Selenium’s API documentation warns that access to another frame or custom XHR requests can fail under those rules, sometimes without a useful error message. Check the browser console when investigating a failure, but do not assume every JavaScript execution problem is caused by origin restrictions.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Common problems and how to fix them

  • Class cast failure: The object being cast must be a WebDriver implementation that supports JavaScript execution. The API lists common implementations, including ChromeDriver, FirefoxDriver, RemoteWebDriver, and SafariDriver; check the driver and Selenium version used by the test.
  • The element is not found or the script affects the wrong document: Selenium searches and executes in the current browsing context. Switch to the correct window or iframe before locating or passing the element.
  • An async call does not complete: Ensure the script calls the injected callback and that the callback is the final entry in arguments. Set a script timeout appropriate to the operation before invoking it.
  • The returned value has the wrong Java type: Inspect what the script actually returns, including whether it can return null, and cast the converted result to the matching Java type.
  • Cross-frame access or XHR fails: Browser security policy may restrict the operation. Confirm the selected frame and inspect the browser console for a more specific browser-side error.
  • Events, console messages, or network activity are the real goal: JavascriptExecutor injects a snippet; it is not an event-stream interface. Selenium’s WebDriver overview distinguishes this from WebDriver BiDi, which supports bidirectional interaction with browser events such as network requests, console messages, and JavaScript errors.

Version and API reference

Method signatures and timeout APIs can vary across Selenium releases. For release-specific details, use the Java API documentation for JavascriptExecutor alongside the Selenium version installed in your project. Selenium’s Node.js binding setup page is for JavaScript-language bindings, not this Java interface; its setup instructions should not be used as Java requirements.

Or skip the browser setup

If your goal is to get a screenshot or PDF rather than execute JavaScript inside a Selenium-controlled test, ScreenshotNeo provides a website screenshot API and MCP server. One GET request returns an image or PDF; the example below saves a WebP shot. See the ScreenshotNeo API documentation for options and setup.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and responses include X-Page-Verdict and X-Billed headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The Free plan includes 1,000 shots per month without a card; paid plans start at $5 for 3,000 shots.

Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.