</>

Technology

Selenium

Difficulty

Intermediate

Interview Question

What is the Actions class in Selenium? List common use cases.

Answer

Actions Class in Selenium

The Actions class handles complex user interactions beyond simple .click() and .sendKeys().

Setup

Java
import org.openqa.selenium.interactions.Actions;

Actions actions = new Actions(driver);

Hover / Mouse Over

Java
// Reveal hidden dropdown on hover
WebElement menu = driver.findElement(By.id("nav-products"));
actions.moveToElement(menu).perform();

// Now click the revealed submenu item
driver.findElement(By.linkText("Laptops")).click();

Right Click (Context Menu)

Java
WebElement element = driver.findElement(By.id("file-icon"));
actions.contextClick(element).perform();

// Select option from context menu
driver.findElement(By.xpath("//li[text()='Rename']")).click();

Double Click

Java
WebElement editableField = driver.findElement(By.id("inline-name"));
actions.doubleClick(editableField).perform();
// Makes field editable (inline editing pattern)

Drag and Drop

Java
WebElement source = driver.findElement(By.id("draggable-card"));
WebElement target = driver.findElement(By.id("drop-zone"));

// Method 1 — direct
actions.dragAndDrop(source, target).perform();

// Method 2 — by offset (if target not precise)
actions.dragAndDropBy(source, 300, 0).perform();  // move 300px right

// Method 3 — explicit steps (more reliable on some apps)
actions.clickAndHold(source)
       .moveToElement(target)
       .release(target)
       .perform();

Keyboard Combinations

Java
// Ctrl + A (select all)
actions.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();

// Ctrl + C (copy)
actions.keyDown(Keys.CONTROL).sendKeys("c").keyUp(Keys.CONTROL).perform();

// Ctrl + V (paste)
actions.keyDown(Keys.CONTROL).sendKeys("v").keyUp(Keys.CONTROL).perform();

// Shift + Click (multi-select in lists)
WebElement firstItem = driver.findElement(By.cssSelector(".list-item:first-child"));
WebElement lastItem  = driver.findElement(By.cssSelector(".list-item:last-child"));
actions.click(firstItem)
       .keyDown(Keys.SHIFT)
       .click(lastItem)
       .keyUp(Keys.SHIFT)
       .perform();

// Tab through form fields
actions.sendKeys(Keys.TAB).sendKeys(Keys.TAB).perform();

// Arrow key navigation
actions.sendKeys(Keys.ARROW_DOWN).perform();

Click at Offset (Relative to Element)

Java
// Click at a specific pixel position within an element
// Useful for canvas elements, sliders, maps
WebElement canvas = driver.findElement(By.id("drawing-canvas"));
actions.moveToElement(canvas, 100, 50).click().perform();
// Clicks at 100px right, 50px down from canvas center

// Slider — move to specific position
WebElement slider = driver.findElement(By.id("price-slider"));
actions.moveToElement(slider)
       .clickAndHold()
       .moveByOffset(150, 0)   // slide 150px right
       .release()
       .perform();

Build + Perform vs Just Perform

Java
// .perform() — executes immediately
actions.moveToElement(menu).perform();

// .build().perform() — explicitly builds action chain first
Action chain = actions
    .moveToElement(source)
    .clickAndHold()
    .moveToElement(target)
    .release()
    .build();
chain.perform();
// Same result, but build() is useful if you want to store the action

Common Real-World Scenarios

Java
// 1. Select text in a field and overtype
WebElement field = driver.findElement(By.id("name"));
actions.click(field)
       .keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL)
       .sendKeys("New Name")
       .perform();

// 2. Hover over map to get tooltip
actions.moveToElement(mapElement, x, y).perform();
String tooltip = wait.until(ExpectedConditions.visibilityOfElementLocated(
    By.cssSelector(".tooltip"))).getText();

// 3. Resize panel by dragging resize handle
WebElement handle = driver.findElement(By.className("resize-handle"));
actions.clickAndHold(handle).moveByOffset(200, 0).release().perform();

Follow AutomateQA

Related Topics