Se
Java ยท TestNG
Element handling with Selenium
23 copy-ready Selenium recipes in Java, Python, C# (.NET), JavaScript and TypeScript, each linked to a live challenge page to run them against.
Language
Conventions ยท Java
// Helpers used below (plus static imports of ExpectedConditions.* and org.testng.Assert.*):
By tid(String id) { return By.cssSelector("[data-testid='" + id + "']"); }
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));1Type into inputs & read output
Practice on /elements/text-box โJava
driver.findElement(tid("full-name-input")).sendKeys("Ada Lovelace");
driver.findElement(tid("submit-text-box")).click();
assertEquals(wait.until(visibilityOfElementLocated(tid("output-name"))).getText(),
"Name: Ada Lovelace");2Checkboxes & select-all
Practice on /elements/check-box โJava
driver.findElement(tid("checkbox-select-all")).click();
assertTrue(driver.findElement(tid("checkbox-documents")).isSelected());3Native <select> dropdown
Practice on /widgets/selects-autocomplete โJava
new Select(driver.findElement(tid("native-select"))).selectByVisibleText("Mumbai");
assertEquals(driver.findElement(tid("native-select-result")).getText(), "Selected: Mumbai");4Autocomplete suggestions
Practice on /widgets/selects-autocomplete โJava
driver.findElement(tid("autocomplete-input")).sendKeys("Ben");
wait.until(elementToBeClickable(tid("autocomplete-option-bengaluru"))).click();
assertEquals(driver.findElement(tid("autocomplete-result")).getText(), "Picked: Bengaluru");5Find a table row by its text
Practice on /elements/web-tables โJava
driver.findElement(By.xpath(
"//tr[@data-testid='table-row'][contains(., 'Priya')]"
+ "//*[starts-with(@data-testid, 'delete-row-')]")).click();
assertEquals(driver.findElements(tid("table-row")).size(), 2);6Double-click & right-click
Practice on /elements/buttons โJava
Actions actions = new Actions(driver);
actions.doubleClick(driver.findElement(tid("double-click-me"))).perform();
actions.contextClick(driver.findElement(tid("right-click-me"))).perform();
assertTrue(driver.findElement(tid("right-click-result")).isDisplayed());7JS alert, confirm & prompt
Practice on /alerts โJava
driver.findElement(tid("prompt-button")).click();
Alert prompt = wait.until(alertIsPresent());
prompt.sendKeys("Ada");
prompt.accept();
assertEquals(driver.findElement(tid("prompt-result")).getText(), "You entered Ada");
driver.findElement(tid("confirm-button")).click();
wait.until(alertIsPresent()).dismiss();8Iframes & nested iframes
Practice on /frames โJava
driver.switchTo().frame(driver.findElement(tid("single-frame")));
driver.findElement(tid("single-frame-button")).click();
assertEquals(driver.findElement(tid("single-frame-result")).getText(), "Clicked inside iframe");
driver.switchTo().defaultContent();
driver.switchTo().frame(driver.findElement(tid("outer-frame")))
.switchTo().frame(driver.findElement(tid("innermost-frame")));9New tabs & windows
Practice on /windows โJava
String original = driver.getWindowHandle();
driver.findElement(tid("new-tab-button")).click();
wait.until(numberOfWindowsToBe(2));
for (String h : driver.getWindowHandles())
if (!h.equals(original)) driver.switchTo().window(h);
assertTrue(wait.until(visibilityOfElementLocated(tid("new-tab-heading"))).isDisplayed());10HTML5 drag & drop
Practice on /interactions/droppable โJava
// Actions.dragAndDrop can't fire HTML5 drag events in Chrome โ dispatch them with JS.
((JavascriptExecutor) driver).executeScript(
"const [s, t] = arguments, dt = new DataTransfer();"
+ "s.dispatchEvent(new DragEvent('dragstart', {bubbles: true, dataTransfer: dt}));"
+ "t.dispatchEvent(new DragEvent('drop', {bubbles: true, dataTransfer: dt}));",
driver.findElement(tid("draggable-box")), driver.findElement(tid("accept-zone")));11File upload
Practice on /elements/upload-download โJava
String path = new java.io.File("src/test/resources/sample.txt").getAbsolutePath();
driver.findElement(tid("file-input")).sendKeys(path);
assertTrue(driver.findElement(tid("uploaded-file-info")).getText().contains("sample.txt"));12Hover tooltips
Practice on /widgets/tooltips-menus โJava
new Actions(driver).moveToElement(driver.findElement(tid("tooltip-trigger"))).perform();
wait.until(visibilityOfElementLocated(tid("tooltip")));13Wait for dynamically loaded content
Practice on /dynamic/dynamic-loading โJava
driver.findElement(tid("loading-1-start")).click();
WebElement result = wait.until(visibilityOfElementLocated(tid("loading-1-result")));
assertTrue(result.getText().contains("Hello World!"));14Shadow DOM
Practice on /shadow-dom โJava
SearchContext root = driver.findElement(By.cssSelector("shadow-counter")).getShadowRoot();
root.findElement(By.cssSelector("#inc")).click();
assertEquals(root.findElement(By.cssSelector("#count")).getText(), "Count: 1");15Nested & closed shadow roots
Practice on /shadow-dom โJava
SearchContext outer = driver.findElement(tid("nested-outer-host")).getShadowRoot();
SearchContext inner = outer.findElement(By.cssSelector("qa-nested-inner")).getShadowRoot();
inner.findElement(By.cssSelector("[data-testid='nested-input']")).sendKeys("Ada");
inner.findElement(By.cssSelector("[data-testid='nested-submit']")).click();
// Closed root: getShadowRoot() fails โ use the keyboard instead.
WebElement host = driver.findElement(tid("closed-host"));
host.click();
new Actions(driver).sendKeys("Ada").sendKeys(Keys.TAB).sendKeys(Keys.ENTER).perform();
wait.until(attributeToBe(host, "data-result", "Hello, Ada!"));16Shadow DOM inside an iframe
Practice on /shadow-dom โJava
driver.switchTo().frame(driver.findElement(tid("shadow-in-iframe")));
SearchContext outer = driver.findElement(By.cssSelector("frame-shadow")).getShadowRoot();
SearchContext inner = outer.findElement(By.cssSelector("frame-shadow-inner")).getShadowRoot();
inner.findElement(By.cssSelector("[data-testid='frame-nested-input']")).sendKeys("Ada");
inner.findElement(By.cssSelector("[data-testid='frame-nested-submit']")).click();
driver.switchTo().defaultContent();17Cross-origin iframe
Practice on /frames โJava
// WebDriver can switch into cross-origin frames.
driver.switchTo().frame(driver.findElement(tid("cross-origin-frame")));
driver.findElement(tid("xorigin-input")).sendKeys("Ada");
driver.findElement(tid("xorigin-submit")).click();
assertEquals(driver.findElement(tid("xorigin-result")).getText(), "Hello, Ada!");
driver.switchTo().defaultContent();18Element covered by an overlay
Practice on /elements/hidden-elements โJava
// click() throws ElementClickInterceptedException while the overlay is there.
driver.findElement(tid("remove-overlay")).click();
wait.until(invisibilityOfElementLocated(tid("click-overlay")));
driver.findElement(tid("covered-button")).click();
assertTrue(driver.findElement(tid("covered-result")).isDisplayed());19Tick a table row by another cell's text
Practice on /elements/web-tables โJava
// XPath axes: from the name cell back to the checkbox cell in the same row.
driver.findElement(By.xpath(
"//td[normalize-space()='Farah Siddiqui']/preceding-sibling::td/input[@type='checkbox']")).click();
assertTrue(driver.findElement(tid("selected-users")).getText().contains("EMP-1043"));20Verify a column sorts correctly (numbers, not text)
Practice on /elements/web-tables โJava
driver.findElement(tid("sort-amount")).click();
assertEquals(driver.findElement(tid("sort-th-amount")).getAttribute("aria-sort"), "ascending");
List<Double> nums = driver.findElements(By.cssSelector("[data-testid='sort-row'] [data-col='amount']")).stream()
.map(WebElement::getText).filter(t -> !t.equals("โ"))
.map(t -> Double.parseDouble(t.replaceAll("[^\\d.]", ""))).toList();
List<Double> sorted = new ArrayList<>(nums);
Collections.sort(sorted);
assertEquals(nums, sorted);21normalize-space(), pseudo-elements & DOM comments
Practice on /elements/xpath-functions โJava
driver.findElement(By.xpath("//label[normalize-space()='Delivery Address']/following::input[1]"))
.sendKeys("12 MG Road");
JavascriptExecutor js = (JavascriptExecutor) driver;
String before = (String) js.executeScript(
"return getComputedStyle(arguments[0], '::before').content;", driver.findElement(tid("pseudo-price")));
assertTrue(before.contains("โน"));
// findElement can't return comment nodes โ read them with JavaScript.
String code = ((String) js.executeScript("return document.evaluate(arguments[0], document, null, "
+ "XPathResult.STRING_TYPE, null).stringValue;",
"//span[@data-testid='comment-target']/following-sibling::comment()")).trim();
assertEquals(code, "secret-code: QA-2026");22Find a record across pages
Practice on /elements/breadcrumbs-pagination โJava
By row = By.cssSelector("[data-order-id='ORD-1042']");
while (driver.findElements(row).isEmpty()) {
WebElement next = driver.findElement(tid("orders-next"));
if (!next.isEnabled()) throw new AssertionError("ORD-1042 not found on any page");
next.click();
}
assertTrue(driver.findElement(row).isDisplayed());23Keyboard keys
Practice on /interactions/key-presses โJava
driver.findElement(tid("key-input")).sendKeys(Keys.ENTER);
assertEquals(driver.findElement(tid("key-result")).getText(), "You entered: Enter");