Driver lifecycle
WebDriver driver = new ChromeDriver(); // opens Chrome
driver.get("https://www.saucedemo.com");
driver.getTitle(); driver.getCurrentUrl();
driver.quit(); // ALWAYS
Finding elements
driver.findElement(By.id("user-name"))
By.cssSelector("[data-test='username']")
By.xpath("//button[text()='Checkout']")
By.className("title") By.name("q") By.linkText("Terms")
Acting on elements
el.sendKeys("text"); el.clear();
el.click();
el.getText(); // visible text
el.getAttribute("value"); // typed input content
el.isDisplayed() isEnabled() isSelected() // booleans
Dropdowns
Select sort = new Select(driver.findElement(By.className(
"product_sort_container")));
sort.selectByVisibleText("Price (low to high)");
Waits — explicit only
WebDriverWait wait =
new WebDriverWait(driver, Duration.ofSeconds(10));
wait.until(ExpectedConditions.
visibilityOfElementLocated(by)); // your default
elementToBeClickable(by)
textToBePresentInElementLocated(by, "x")
invisibilityOfElementLocated(by) // spinners
urlContains("inventory")
// NEVER Thread.sleep. Never mix implicit+explicit.
Navigation & window
driver.get(url);
driver.navigate().back(); .forward(); .refresh();
driver.getCurrentUrl(); driver.getTitle();
driver.manage().window().maximize();
Frames, alerts, keys
driver.switchTo().frame("frameName");
driver.switchTo().defaultContent(); // climb back out
driver.switchTo().alert().accept(); // or dismiss()
el.sendKeys(Keys.ENTER); Keys.TAB Keys.ESCAPE
Exception -> first move
NoSuchElementException verify locator in $$() first
TimeoutException message names condition+locator
StaleElementReference DOM re-rendered -> re-find it
ElementNotInteractable hidden twin matched / not ready
SessionNotCreated Chrome/driver -> re-run, check net
Page Object skeleton
public class LoginPage {
private WebDriver driver;
private By user = By.id("user-name"); // locators
public LoginPage(WebDriver d){ driver = d; }
public void loginAs(String u, String p){...} // action
public String getErrorMessage(){...} // question
}
// tests: zero locators, all assertions