Recommended Free Tools
To work with an element inside a frame or iframe, first switch Selenium’s browsing context to that frame with driver.switchTo().frame(...), then locate and interact with the inner element. Switch back with defaultContent() for the top-level page or parentFrame() for the containing frame. JavaScript execution uses the currently selected context too, so it does not bypass frame switching.
Why Selenium needs a frame switch
WebDriver starts in the top-level document. An element inside an iframe belongs to a different document, so a locator that works elsewhere on the page can fail until the driver has switched into the frame. After switching, subsequent WebDriver commands operate in that frame until you change context again.
Selenium’s official Working with IFrames and frames guide describes frames as a now-deprecated means of building a site layout from multiple documents on the same domain. Existing sites and embedded content still use them, so frame switching remains useful for automation.
Switch into a frame, interact, and return
Find the iframe from the current page context, pass its WebElement to frame, and then locate the element inside it. Replace the sample IDs and email with values from the page under test.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware match#1 Best Overall
- 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.
WebElement iframe = driver.findElement(By.id("iframe1"));
driver.switchTo().frame(iframe);
WebElement email = driver.findElement(By.id("email"));
email.sendKeys("admin@example.com");
// Return to the top-level document.
driver.switchTo().defaultContent();
The iframe locator must be found in the context that contains that iframe. If the iframe is nested, first switch into each enclosing frame, in order, before locating the child.
Choose how to identify the frame
| Method | How to use it | When it fits | Trade-off |
|---|---|---|---|
| WebElement | Locate the frame with a normal Selenium locator and pass the returned element to frame. |
Use when a CSS selector or other locator is clear, or the frame lacks a dependable name or ID. | Selenium describes this as the most flexible option; the locator still needs to identify the intended frame. |
| Name or ID | Pass the frame’s name or ID string to frame. |
Use when the attribute is stable and unique. | If a name or ID is not unique, Selenium’s guide says the first match is selected. |
| Index | Pass a zero-based integer corresponding to the frame’s order. | Use only when the frame order is known and stable. | Order-dependent and less self-documenting; Selenium notes the order can be queried with window.frames. |
All three selection methods are supported by Selenium. Prefer a WebElement or unique name/ID when possible; an index can become incorrect if the page changes its frame order.
Rank #2
- 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.
Navigate nested frames and restore context
Frame selection is relative to the current context. To reach an inner frame, enter its parent first, locate the child from there, and switch into it. Use parentFrame() to move back one level, or defaultContent() to reset directly to the top-level document.
// Starting in the top-level document:
WebElement outer = driver.findElement(By.id("outer-frame"));
driver.switchTo().frame(outer);
// The child frame is located inside the outer frame.
WebElement inner = driver.findElement(By.id("inner-frame"));
driver.switchTo().frame(inner);
// Return to the containing outer frame.
driver.switchTo().parentFrame();
// Or reset directly to the top-level document.
driver.switchTo().defaultContent();
Reset explicitly before locating a different top-level iframe if the current context is uncertain. Otherwise, Selenium may search the wrong document.
Rank #3
- 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 JavaScript in the selected frame
Cast the driver to JavascriptExecutor to execute JavaScript. The script runs in the currently selected frame or window: document means that context’s document. Switch first if the script needs to read or change an iframe’s page.
JavascriptExecutor js = (JavascriptExecutor) driver;
String title = (String) js.executeScript("return document.title;");
After switching into an iframe, the example returns that iframe document’s title. After defaultContent(), it returns the top-level page title. Selenium maps script return values to Java values such as WebElement, Boolean, numbers, String, List, Map, or null. See the official JavaScriptExecutor API.
Rank #4
- 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
Use ordinary WebDriver location and interaction for normal test actions when appropriate. JavaScript is useful for a particular in-page computation or return value, but it does not change the selected WebDriver context.
Asynchronous JavaScript
executeAsyncScript appends a callback as the final script argument. Call it when the asynchronous work finishes; its first argument becomes the returned result. Selenium’s Java API documents a default script timeout of 0 ms, so set a suitable timeout for work that needs time.
Best Value
- 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.
driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(10));
Object result = ((JavascriptExecutor) driver).executeAsyncScript(
"const done = arguments[arguments.length - 1];" +
"someAsyncOperation().then(value => done(value));"
);
This is a pattern to adapt, not a complete application-specific test: define the operation, handle its failure path, and make sure the callback runs. Selenium’s API documentation includes a callback-based example for waiting until an application widget loads before switching into a frame.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshoot frame and JavaScript failures
- An inner locator finds no element: Check whether the driver is still in the top-level document or in the wrong frame. Switch into the frame that contains the element, then retry.
- The iframe locator itself fails: Find it from its current parent context. For a child iframe, switch into its containing frame before looking for it.
- A later locator searches the wrong page: Check the active context. Call
defaultContent()before locating a different top-level iframe. - JavaScript reads the wrong document:
executeScriptruns in the selected frame or window. Switch to the intended context first. - An async script times out or never returns: Confirm that the script calls Selenium’s injected callback on completion and configure an appropriate script timeout.
Or skip the browser setup
For a rendered-page image or PDF rather than an interactive Selenium test, ScreenshotNeo offers a one-request screenshot API. It is not a replacement for frame-aware WebDriver interactions. Its API accepts a URL and returns a PNG, JPEG, WebP, or PDF.
For example, save a page screenshot as WebP with cURL:
Quick Recap
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
See the ScreenshotNeo API documentation for request options. ScreenshotNeo removes cookie banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, and failed loads are not billed. Its MCP server gives AI agents screenshot tools, and the free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for free.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →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.

