Selenium Cheat Sheet
Quick reference for common Selenium commands
Setup
ChromeDriver
J
WebDriver driver = new ChromeDriver(); Py
driver = webdriver.Chrome() JS
const driver = new Builder().forBrowser('chrome').build(); C#
IWebDriver driver = new ChromeDriver(); FirefoxDriver
J
WebDriver driver = new FirefoxDriver(); Py
driver = webdriver.Firefox() JS
const driver = new Builder().forBrowser('firefox').build(); C#
IWebDriver driver = new FirefoxDriver(); Headless Mode
J
options.addArguments("--headless"); Py
options.add_argument("--headless") JS
options.addArguments("--headless"); C#
options.AddArgument("--headless"); Navigation
Open URL
J
driver.get("https://example.com"); Py
driver.get("https://example.com") JS
await driver.get("https://example.com"); C#
driver.Navigate().GoToUrl("https://example.com"); Back
J
driver.navigate().back(); Py
driver.back() JS
await driver.navigate().back(); C#
driver.Navigate().Back(); Forward
J
driver.navigate().forward(); Py
driver.forward() JS
await driver.navigate().forward(); C#
driver.Navigate().Forward(); Refresh
J
driver.navigate().refresh(); Py
driver.refresh() JS
await driver.navigate().refresh(); C#
driver.Navigate().Refresh(); Locators
By ID
J
driver.findElement(By.id("id")); Py
driver.find_element(By.ID, "id") JS
await driver.findElement(By.id("id")); C#
driver.FindElement(By.Id("id")); By Name
J
driver.findElement(By.name("name")); Py
driver.find_element(By.NAME, "name") JS
await driver.findElement(By.name("name")); C#
driver.FindElement(By.Name("name")); By CSS
J
driver.findElement(By.cssSelector(".class")); Py
driver.find_element(By.CSS_SELECTOR, ".class") JS
await driver.findElement(By.css(".class")); C#
driver.FindElement(By.CssSelector(".class")); By XPath
J
driver.findElement(By.xpath("//div[@id='x']")); Py
driver.find_element(By.XPATH, "//div[@id='x']") JS
await driver.findElement(By.xpath("//div[@id='x']")); C#
driver.FindElement(By.XPath("//div[@id='x']")); By Link Text
J
driver.findElement(By.linkText("Click me")); Py
driver.find_element(By.LINK_TEXT, "Click me") JS
await driver.findElement(By.linkText("Click me")); C#
driver.FindElement(By.LinkText("Click me")); By Class Name
J
driver.findElement(By.className("class")); Py
driver.find_element(By.CLASS_NAME, "class") JS
await driver.findElement(By.className("class")); C#
driver.FindElement(By.ClassName("class")); Actions
Click
J
element.click(); Py
element.click() JS
await element.click(); C#
element.Click(); Type Text
J
element.sendKeys("text"); Py
element.send_keys("text") JS
await element.sendKeys("text"); C#
element.SendKeys("text"); Clear Input
J
element.clear(); Py
element.clear() JS
await element.clear(); C#
element.Clear(); Get Text
J
String text = element.getText(); Py
text = element.text JS
const text = await element.getText(); C#
string text = element.Text; Get Attribute
J
String value = element.getAttribute("href"); Py
value = element.get_attribute("href") JS
const value = await element.getAttribute("href"); C#
string value = element.GetAttribute("href"); Submit Form
J
element.submit(); Py
element.submit() JS
await element.submit(); C#
element.Submit(); Waits
Implicit Wait
J
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); Py
driver.implicitly_wait(10) JS
await driver.manage().setTimeouts({ implicit: 10000 }); C#
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); Explicit Wait
J
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); Py
wait = WebDriverWait(driver, 10) JS
const wait = new WebDriverWait(driver, 10000); C#
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); Wait for Visible
J
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("id"))); Py
wait.until(EC.visibility_of_element_located((By.ID, "id"))) JS
await wait.until(until.elementIsVisible(el)); C#
wait.Until(ExpectedConditions.ElementIsVisible(By.Id("id"))); Wait for Clickable
J
wait.until(ExpectedConditions.elementToBeClickable(By.id("id"))); Py
wait.until(EC.element_to_be_clickable((By.ID, "id"))) JS
await wait.until(until.elementIsEnabled(el)); C#
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("id"))); Browser Info
Page Title
J
String title = driver.getTitle(); Py
title = driver.title JS
const title = await driver.getTitle(); C#
string title = driver.Title; Current URL
J
String url = driver.getCurrentUrl(); Py
url = driver.current_url JS
const url = await driver.getCurrentUrl(); C#
string url = driver.Url; Page Source
J
String source = driver.getPageSource(); Py
source = driver.page_source JS
const source = await driver.getPageSource(); C#
string source = driver.PageSource; Windows & Frames
Switch to Frame
J
driver.switchTo().frame("frameName"); Py
driver.switch_to.frame("frameName") JS
await driver.switchTo().frame("frameName"); C#
driver.SwitchTo().Frame("frameName"); Switch to Default
J
driver.switchTo().defaultContent(); Py
driver.switch_to.default_content() JS
await driver.switchTo().defaultContent(); C#
driver.SwitchTo().DefaultContent(); New Window
J
driver.switchTo().newWindow(WindowType.WINDOW); Py
driver.switch_to.new_window("window") JS
await driver.switchTo().newWindow("window"); C#
driver.SwitchTo().NewWindow(WindowType.Window); Get Window Handle
J
String handle = driver.getWindowHandle(); Py
handle = driver.current_window_handle JS
const handle = await driver.getWindowHandle(); C#
string handle = driver.CurrentWindowHandle; Cleanup
Close Window
J
driver.close(); Py
driver.close() JS
await driver.close(); C#
driver.Close(); Quit Browser
J
driver.quit(); Py
driver.quit() JS
await driver.quit(); C#
driver.Quit(); Explicit Waits
Create Wait
J
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); Py
wait = WebDriverWait(driver, 10) JS
// await driver.wait(condition, 10000) C#
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); Wait Visible
J
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("x"))); Py
wait.until(EC.visibility_of_element_located((By.ID, "x"))) JS
await driver.wait(until.elementIsVisible(driver.findElement(By.id("x"))), 10000); C#
wait.Until(d => d.FindElement(By.Id("x")).Displayed); Wait Clickable
J
wait.until(ExpectedConditions.elementToBeClickable(By.id("x"))); Py
wait.until(EC.element_to_be_clickable((By.ID, "x"))) JS
await driver.wait(until.elementIsEnabled(el), 10000); C#
wait.Until(d => { var e = d.FindElement(By.Id("x")); return e.Displayed && e.Enabled; }); Wait Invisible
J
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector(".spinner"))); Py
wait.until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".spinner"))) JS
await driver.wait(async () => !(await driver.findElements(By.css(".spinner"))).length, 10000); C#
wait.Until(d => d.FindElements(By.CssSelector(".spinner")).All(e => !e.Displayed)); Wait URL / Text
J
wait.until(ExpectedConditions.urlContains("/done")); wait.until(ExpectedConditions.textToBe(By.id("t"), "OK")); Py
wait.until(EC.url_contains("/done")); wait.until(EC.text_to_be_present_in_element((By.ID, "t"), "OK")) JS
await driver.wait(until.urlContains("/done"), 10000); C#
wait.Until(d => d.Url.Contains("/done")); Custom Lambda
J
wait.until(d -> d.findElements(By.cssSelector("tr")).size() >= 5); Py
wait.until(lambda d: len(d.find_elements(By.CSS_SELECTOR, "tr")) >= 5) JS
await driver.wait(async () => (await driver.findElements(By.css("tr"))).length >= 5, 10000); C#
wait.Until(d => d.FindElements(By.CssSelector("tr")).Count >= 5); Timeouts & Load Strategy
Page Load Timeout
J
driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(30)); Py
driver.set_page_load_timeout(30) JS
await driver.manage().setTimeouts({ pageLoad: 30000 }); C#
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30); Implicit Wait (keep 0)
J
driver.manage().timeouts().implicitlyWait(Duration.ZERO); Py
driver.implicitly_wait(0) JS
await driver.manage().setTimeouts({ implicit: 0 }); C#
driver.Manage().Timeouts().ImplicitWait = TimeSpan.Zero; Eager Load Strategy
J
options.setPageLoadStrategy(PageLoadStrategy.EAGER); Py
options.page_load_strategy = "eager" JS
options.setPageLoadStrategy("eager"); C#
options.PageLoadStrategy = PageLoadStrategy.Eager; Element Info
Text
J
String t = element.getText(); Py
t = element.text JS
const t = await element.getText(); C#
string t = element.Text; Attribute / Property
J
element.getDomAttribute("href"); element.getDomProperty("value"); Py
element.get_dom_attribute("href"); element.get_property("value") JS
await element.getAttribute("href"); await element.getProperty("value"); C#
element.GetDomAttribute("href"); element.GetDomProperty("value"); Displayed / Enabled / Selected
J
element.isDisplayed(); element.isEnabled(); element.isSelected(); Py
element.is_displayed(); element.is_enabled(); element.is_selected() JS
await element.isDisplayed(); await element.isEnabled(); await element.isSelected(); C#
element.Displayed; element.Enabled; element.Selected; CSS Value / Rect
J
element.getCssValue("color"); element.getRect(); Py
element.value_of_css_property("color"); element.rect JS
await element.getCssValue("color"); await element.getRect(); C#
element.GetCssValue("color"); element.Size; element.Location; Element Screenshot
J
element.getScreenshotAs(OutputType.FILE); Py
element.screenshot("el.png") JS
await element.takeScreenshot(); C#
((ITakesScreenshot)element).GetScreenshot().SaveAsFile("el.png"); Select Dropdowns
By Visible Text
J
new Select(el).selectByVisibleText("UK"); Py
Select(el).select_by_visible_text("UK") JS
await new Select(el).selectByVisibleText("UK"); C#
new SelectElement(el).SelectByText("UK"); By Value / Index
J
select.selectByValue("uk"); select.selectByIndex(2); Py
select.select_by_value("uk"); select.select_by_index(2) JS
await select.selectByValue("uk"); await select.selectByIndex(2); C#
select.SelectByValue("uk"); select.SelectByIndex(2); Selected Option
J
select.getFirstSelectedOption().getText(); Py
select.first_selected_option.text JS
await (await select.getFirstSelectedOption()).getText(); C#
select.SelectedOption.Text; Actions API
Hover
J
new Actions(driver).moveToElement(el).perform(); Py
ActionChains(driver).move_to_element(el).perform() JS
await driver.actions().move({ origin: el }).perform(); C#
new Actions(driver).MoveToElement(el).Perform(); Right / Double Click
J
actions.contextClick(el).perform(); actions.doubleClick(el).perform(); Py
actions.context_click(el).perform(); actions.double_click(el).perform() JS
await driver.actions().contextClick(el).perform(); await driver.actions().doubleClick(el).perform(); C#
actions.ContextClick(el).Perform(); actions.DoubleClick(el).Perform(); Drag and Drop
J
actions.dragAndDrop(source, target).perform(); Py
actions.drag_and_drop(source, target).perform() JS
await driver.actions().dragAndDrop(source, target).perform(); C#
actions.DragAndDrop(source, target).Perform(); Scroll (4.2+)
J
actions.scrollToElement(el).perform(); actions.scrollByAmount(0, 500).perform(); Py
actions.scroll_to_element(el).perform(); actions.scroll_by_amount(0, 500).perform() JS
await driver.actions().scroll(0, 0, 0, 500).perform(); C#
actions.ScrollToElement(el).Perform(); actions.ScrollByAmount(0, 500).Perform(); Key Chord
J
el.sendKeys(Keys.chord(Keys.CONTROL, "a")); Py
el.send_keys(Keys.CONTROL + "a") JS
await el.sendKeys(Key.chord(Key.CONTROL, "a")); C#
el.SendKeys(Keys.Control + "a"); Alerts
Wait & Switch
J
Alert a = wait.until(ExpectedConditions.alertIsPresent()); Py
a = wait.until(EC.alert_is_present()) JS
await driver.wait(until.alertIsPresent(), 5000); const a = await driver.switchTo().alert(); C#
var a = wait.Until(d => d.SwitchTo().Alert()); Accept / Dismiss
J
a.accept(); a.dismiss(); Py
a.accept(); a.dismiss() JS
await a.accept(); await a.dismiss(); C#
a.Accept(); a.Dismiss(); Text / Type
J
a.getText(); a.sendKeys("yes"); Py
a.text; a.send_keys("yes") JS
await a.getText(); await a.sendKeys("yes"); C#
a.Text; a.SendKeys("yes"); Unhandled Policy
J
options.setUnhandledPromptBehaviour(UnexpectedAlertBehaviour.DISMISS_AND_NOTIFY); Py
options.unhandled_prompt_behavior = "dismiss and notify" JS
.withCapabilities({ unhandledPromptBehavior: "dismiss and notify" }) C#
options.UnhandledPromptBehavior = UnhandledPromptBehavior.DismissAndNotify; Cookies & Storage
Get Cookie
J
driver.manage().getCookieNamed("session"); Py
driver.get_cookie("session") JS
await driver.manage().getCookie("session"); C#
driver.Manage().Cookies.GetCookieNamed("session"); Add Cookie
J
driver.manage().addCookie(new Cookie("k", "v")); Py
driver.add_cookie({"name": "k", "value": "v"}) JS
await driver.manage().addCookie({ name: "k", value: "v" }); C#
driver.Manage().Cookies.AddCookie(new Cookie("k", "v")); Delete All
J
driver.manage().deleteAllCookies(); Py
driver.delete_all_cookies() JS
await driver.manage().deleteAllCookies(); C#
driver.Manage().Cookies.DeleteAllCookies(); localStorage
J
js.executeScript("localStorage.setItem(arguments[0], arguments[1])", "k", "v"); Py
driver.execute_script("localStorage.setItem(arguments[0], arguments[1])", "k", "v") JS
await driver.executeScript("localStorage.setItem(arguments[0], arguments[1])", "k", "v"); C#
js.ExecuteScript("localStorage.setItem(arguments[0], arguments[1])", "k", "v"); JavaScript & Screenshots
Execute Script
J
((JavascriptExecutor) driver).executeScript("return document.title"); Py
driver.execute_script("return document.title") JS
await driver.executeScript("return document.title"); C#
((IJavaScriptExecutor)driver).ExecuteScript("return document.title"); Scroll Into View
J
js.executeScript("arguments[0].scrollIntoView({block:'center'})", el); Py
driver.execute_script("arguments[0].scrollIntoView({block:'center'})", el) JS
await driver.executeScript("arguments[0].scrollIntoView({block:'center'})", el); C#
js.ExecuteScript("arguments[0].scrollIntoView({block:'center'})", el); Page Screenshot
J
((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE); Py
driver.save_screenshot("page.png") JS
fs.writeFileSync("page.png", await driver.takeScreenshot(), "base64"); C#
((ITakesScreenshot)driver).GetScreenshot().SaveAsFile("page.png"); Print to PDF (4.x)
J
Pdf pdf = ((PrintsPage) driver).print(new PrintOptions()); Py
pdf = driver.print_page(PrintOptions()) JS
const pdf = await driver.printPage({}); C#
var pdf = driver.Print(new PrintOptions()); Shadow DOM & Relative Locators
Shadow Root
J
host.getShadowRoot().findElement(By.cssSelector("input")); Py
host.shadow_root.find_element(By.CSS_SELECTOR, "input") JS
(await host.getShadowRoot()).findElement(By.css("input")); C#
host.GetShadowRoot().FindElement(By.CssSelector("input")); Relative: Above
J
driver.findElement(with(By.tagName("input")).above(password)); Py
driver.find_element(locate_with(By.TAG_NAME, "input").above(password)) JS
await driver.findElement(locateWith(By.tagName("input")).above(password)); C#
driver.FindElement(RelativeBy.WithLocator(By.TagName("input")).Above(password)); Relative: Near
J
with(By.tagName("button")).near(label) Py
locate_with(By.TAG_NAME, "button").near(label) JS
locateWith(By.tagName("button")).near(label) C#
RelativeBy.WithLocator(By.TagName("button")).Near(label) BiDi Essentials (4.x)
Enable BiDi
J
options.setCapability("webSocketUrl", true); Py
options.enable_bidi = True JS
options.enableBidi(); C#
new ChromeOptions { UseWebSocketUrl = true } Console Messages
J
driver.script().addConsoleMessageHandler(e -> log(e.getText())); Py
driver.script.add_console_message_handler(lambda e: print(e.text)) JS
await driver.script().addConsoleMessageHandler(e => console.log(e.text)); C#
await bidi.Log.OnEntryAddedAsync(e => Console.WriteLine(e.Text)); JS Errors
J
driver.script().addJavaScriptErrorHandler(e -> errors.add(e.getText())); Py
driver.script.add_javascript_error_handler(errors.append) JS
await driver.script().addJavaScriptErrorHandler(e => errors.push(e.text)); C#
// filter Log entries where Level == "error" Basic Auth
J
driver.network().addAuthenticationHandler(new UsernameAndPassword("u", "p")); Py
driver.network.add_auth_handler("u", "p") JS
await driver.network().addAuthenticationHandler("u", "p"); C#
await bidi.Network.OnAuthRequiredAsync(e => e.Request.ContinueWithAuthAsync(new AuthCredentials("u", "p"))); Block Request
J
network.onBeforeRequestSent(e -> network.failRequest(e.getRequest().getRequestId())); Py
driver.network.add_request_handler(["**/analytics/**"], lambda r: r.fail()) JS
await network.beforeRequestSent(e => network.failRequest(e.request.request)); C#
await bidi.Network.InterceptRequestAsync(e => e.Request.FailAsync()); Browser Options
Window Size Arg
J
options.addArguments("--window-size=1366,768"); Py
options.add_argument("--window-size=1366,768") JS
options.addArguments("--window-size=1366,768"); C#
options.AddArgument("--window-size=1366,768"); Pin Browser Version
J
options.setBrowserVersion("128"); Py
options.browser_version = "128" JS
options.setBrowserVersion("128"); C#
options.BrowserVersion = "128"; Accept Insecure Certs
J
options.setAcceptInsecureCerts(true); Py
options.accept_insecure_certs = True JS
options.setAcceptInsecureCerts(true); C#
options.AcceptInsecureCertificates = true; Mobile Emulation (Chrome)
J
options.setExperimentalOption("mobileEmulation", Map.of("deviceName", "Pixel 7")); Py
options.add_experimental_option("mobileEmulation", {"deviceName": "Pixel 7"}) JS
options.setMobileEmulation({ deviceName: "Pixel 7" }); C#
options.EnableMobileEmulation("Pixel 7"); Remote / Grid
J
new RemoteWebDriver(new URL("http://grid:4444"), options); Py
webdriver.Remote("http://grid:4444", options=options) JS
new Builder().usingServer("http://grid:4444").setChromeOptions(options).build(); C#
new RemoteWebDriver(new Uri("http://grid:4444"), options); Selenium Cheat Sheet - seleniumdecoded.com