assert_
glossary ↓ downloads
cheatsheet · suite 04

First Selenium framework

every pattern from this suite, one pageCtrl+P prints it clean
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