Mouse actions
There are only 3 actions that can be accomplished with a mouse: pressing down on a button, releasing a pressed button, and moving the mouse. Selenium provides convenience methods that combine these actions in the most common ways.
Click and hold
This method combines moving the mouse to the center of an element with pressing the left mouse button. This is useful for focusing a specific element:
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
let clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.move({origin: clickable}).press().perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
describe('Click and hold', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Mouse move and mouseDown on an element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
let clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.move({origin: clickable}).press().perform();
});
});
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Click and release
This method combines moving to the center of an element with pressing and releasing the left mouse button. This is otherwise known as “clicking”:
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
let click = driver.findElement(By.id("click"));
const actions = driver.actions({async: true});
await actions.move({origin: click}).click().perform();
Show full example
const {By,Builder} = require('selenium-webdriver');
describe('Click and release', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Mouse move and click on an element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
let click = driver.findElement(By.id("click"));
const actions = driver.actions({async: true});
await actions.move({origin: click}).click().perform();
});
});
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Alternate Button Clicks
There are a total of 5 defined buttons for a Mouse:
- 0 — Left Button (the default)
- 1 — Middle Button (currently unsupported)
- 2 — Right Button
- 3 — X1 (Back) Button
- 4 — X2 (Forward) Button
Context Click
This method combines moving to the center of an element with pressing and releasing the right mouse button (button 2). This is otherwise known as “right-clicking”:
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.contextClick(clickable).perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Right click', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Mouse move and right click on an element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.contextClick(clickable).perform();
await driver.sleep(500);
const clicked = await driver.findElement(By.id('click-status')).getText();
assert.deepStrictEqual(clicked, `context-clicked`)
});
});
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Back Click
There is no convenience method for this, it is just pressing and releasing mouse button 3
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const actions = driver.actions({async: true});
await actions.press(Button.BACK).release(Button.BACK).perform()
Show full example
const {By, Button, Browser, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Should be able to perform BACK click and FORWARD click', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Back click', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
await driver.findElement(By.id("click")).click();
assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
const actions = driver.actions({async: true});
await actions.press(Button.BACK).release(Button.BACK).perform()
assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
});
it('Forward click', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
await driver.findElement(By.id("click")).click();
await driver.navigate().back();
assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
const actions = driver.actions({async: true});
await actions.press(Button.FORWARD).release(Button.FORWARD).perform()
assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
});
});
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Forward Click
There is no convenience method for this, it is just pressing and releasing mouse button 4
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const actions = driver.actions({async: true});
await actions.press(Button.FORWARD).release(Button.FORWARD).perform()
Show full example
const {By, Button, Browser, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Should be able to perform BACK click and FORWARD click', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Back click', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
await driver.findElement(By.id("click")).click();
assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
const actions = driver.actions({async: true});
await actions.press(Button.BACK).release(Button.BACK).perform()
assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
});
it('Forward click', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
await driver.findElement(By.id("click")).click();
await driver.navigate().back();
assert.deepStrictEqual(await driver.getTitle(), `BasicMouseInterfaceTest`)
const actions = driver.actions({async: true});
await actions.press(Button.FORWARD).release(Button.FORWARD).perform()
assert.deepStrictEqual(await driver.getTitle(), `We Arrive Here`)
});
});
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Double click
This method combines moving to the center of an element with pressing and releasing the left mouse button twice.
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.doubleClick(clickable).perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('Double click', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Double-click on an element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const clickable = driver.findElement(By.id("clickable"));
const actions = driver.actions({async: true});
await actions.doubleClick(clickable).perform();
await driver.sleep(500);
const status = await driver.findElement(By.id('click-status')).getText();
assert.deepStrictEqual(status, `double-clicked`)
});
});
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Move to element
This method moves the mouse to the in-view center point of the element. This is otherwise known as “hovering.” Note that the element must be in the viewport or else the command will error.
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const hoverable = driver.findElement(By.id("hover"));
const actions = driver.actions({async: true});
await actions.move({origin: hoverable}).perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
const assert = require("assert");
describe('Move to element', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('Mouse move into an element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const hoverable = driver.findElement(By.id("hover"));
const actions = driver.actions({async: true});
await actions.move({origin: hoverable}).perform();
const status = await driver.findElement(By.id('move-status')).getText();
assert.deepStrictEqual(status, `hovered`)
});
});
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Move by offset
These methods first move the mouse to the designated origin and then by the number of pixels in the provided offset. Note that the position of the mouse must be in the viewport or else the command will error.
Offset from Element
This method moves the mouse to the in-view center point of the element, then moves by the provided offset.
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const mouseTracker = driver.findElement(By.id("mouse-tracker"));
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
Show full example
const {By, Origin, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Mouse move by offset', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('From element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const mouseTracker = driver.findElement(By.id("mouse-tracker"));
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
await driver.sleep(500);
let result = await driver.findElement(By.id('relative-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 100 - 8) < 2), true)
});
it('From viewport origin', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0}).perform();
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 8) < 2), true)
});
it('From current pointer location', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 6, y: 3}).perform()
await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual(Math.abs(parseInt(result[0]) - 6 - 13) < 2, true)
assert.deepStrictEqual(Math.abs(parseInt(result[1]) - 3 - 15) < 2, true)
});
});
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Offset from Viewport
This method moves the mouse from the upper left corner of the current viewport by the provided offset.
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
driver.action
.move_to_location(8, 12)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0}).perform();
Show full example
const {By, Origin, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Mouse move by offset', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('From element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const mouseTracker = driver.findElement(By.id("mouse-tracker"));
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
await driver.sleep(500);
let result = await driver.findElement(By.id('relative-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 100 - 8) < 2), true)
});
it('From viewport origin', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0}).perform();
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 8) < 2), true)
});
it('From current pointer location', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 6, y: 3}).perform()
await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual(Math.abs(parseInt(result[0]) - 6 - 13) < 2, true)
assert.deepStrictEqual(Math.abs(parseInt(result[1]) - 3 - 15) < 2, true)
});
});
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Offset from Current Pointer Location
This method moves the mouse from its current position by the offset provided by the user. If the mouse has not previously been moved, the position will be in the upper left corner of the viewport. Note that the pointer position does not change when the page is scrolled.
Note that the first argument X specifies to move right when positive, while the second argument
Y specifies to move down when positive. So moveByOffset(30, -10)
moves right 30 and up 10 from
the current mouse position.
new Actions(driver)
.moveByOffset(13, 15)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
driver.action
.move_by(13, 15)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
Show full example
const {By, Origin, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Mouse move by offset', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('From element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const mouseTracker = driver.findElement(By.id("mouse-tracker"));
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0, origin: mouseTracker}).perform();
await driver.sleep(500);
let result = await driver.findElement(By.id('relative-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 100 - 8) < 2), true)
});
it('From viewport origin', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 8, y: 0}).perform();
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual((Math.abs(parseInt(result[0]) - 8) < 2), true)
});
it('From current pointer location', async function () {
await driver.get('https://selenium.dev/selenium/web/mouse_interaction.html');
const actions = driver.actions({async: true});
await actions.move({x: 6, y: 3}).perform()
await actions.move({x: 13, y: 15, origin: Origin.POINTER}).perform()
let result = await driver.findElement(By.id('absolute-location')).getText();
result = result.split(', ');
assert.deepStrictEqual(Math.abs(parseInt(result[0]) - 6 - 13) < 2, true)
assert.deepStrictEqual(Math.abs(parseInt(result[1]) - 3 - 15) < 2, true)
});
});
Actions(driver)
.moveByOffset(13, 15)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Drag and Drop on Element
This method firstly performs a click-and-hold on the source element, moves to the location of the target element and then releases the mouse.
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const draggable = driver.findElement(By.id("draggable"));
const droppable = await driver.findElement(By.id("droppable"));
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, droppable).perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Drag and Drop', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('By Offset', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const draggable = driver.findElement(By.id("draggable"));
let start = await draggable.getRect();
let finish = await driver.findElement(By.id("droppable")).getRect();
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, {x: finish.x - start.x, y: finish.y - start.y}).perform();
let result = await driver.findElement(By.id("drop-status")).getText();
assert.deepStrictEqual('dropped', result)
});
it('Onto Element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const draggable = driver.findElement(By.id("draggable"));
const droppable = await driver.findElement(By.id("droppable"));
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, droppable).perform();
let result = await driver.findElement(By.id("drop-status")).getText();
assert.deepStrictEqual('dropped', result)
});
});
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}
Drag and Drop by Offset
This method firstly performs a click-and-hold on the source element, moves to the given offset and then releases the mouse.
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Show full example
package dev.selenium.actions_api;
import dev.selenium.BaseChromeTest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Rectangle;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.PointerInput;
import org.openqa.selenium.interactions.Sequence;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.time.Duration;
import java.util.Collections;
public class MouseTest extends BaseChromeTest {
@Test
public void clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.clickAndHold(clickable)
.perform();
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText());
}
@Test
public void clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("click"));
new Actions(driver)
.click(clickable)
.perform();
Assertions.assertTrue(driver.getCurrentUrl().contains("resultPage.html"));
}
@Test
public void rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.contextClick(clickable)
.perform();
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
Assertions.assertEquals(driver.getTitle(), "We Arrive Here");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle());
}
@Test
public void forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.findElement(By.id("click")).click();
driver.navigate().back();
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
Assertions.assertEquals("We Arrive Here", driver.getTitle());
}
@Test
public void doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement clickable = driver.findElement(By.id("clickable"));
new Actions(driver)
.doubleClick(clickable)
.perform();
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText());
}
@Test
public void hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement hoverable = driver.findElement(By.id("hover"));
new Actions(driver)
.moveToElement(hoverable)
.perform();
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText());
}
@Test
public void moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
driver.manage().window().fullscreen();
WebElement tracker = driver.findElement(By.id("mouse-tracker"));
new Actions(driver)
.moveToElement(tracker, 8, 0)
.perform();
String[] result = driver.findElement(By.id("relative-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2);
}
@Test
public void moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2);
}
@Test
public void moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
PointerInput mouse = new PointerInput(PointerInput.Kind.MOUSE, "default mouse");
Sequence actions = new Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11));
((RemoteWebDriver) driver).perform(Collections.singletonList(actions));
new Actions(driver)
.moveByOffset(13, 15)
.perform();
String[] result = driver.findElement(By.id("absolute-location")).getText().split(", ");
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2);
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2);
}
@Test
public void dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
WebElement droppable = driver.findElement(By.id("droppable"));
new Actions(driver)
.dragAndDrop(draggable, droppable)
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
@Test
public void dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html");
WebElement draggable = driver.findElement(By.id("draggable"));
Rectangle start = draggable.getRect();
Rectangle finish = driver.findElement(By.id("droppable")).getRect();
new Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform();
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText());
}
}
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
Show full example
import pytest
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.mouse_button import MouseButton
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_click_and_hold(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.click_and_hold(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "focused"
def test_click_and_release(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "click")
ActionChains(driver) \
.click(clickable) \
.perform()
assert "resultPage.html" in driver.current_url
def test_right_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.context_click(clickable) \
.perform()
sleep(0.5)
assert driver.find_element(By.ID, "click-status").text == "context-clicked"
def test_back_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
assert driver.title == "We Arrive Here"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.BACK)
action.pointer_action.pointer_up(MouseButton.BACK)
action.perform()
assert driver.title == "BasicMouseInterfaceTest"
def test_forward_click_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
driver.find_element(By.ID, "click").click()
driver.back()
assert driver.title == "BasicMouseInterfaceTest"
action = ActionBuilder(driver)
action.pointer_action.pointer_down(MouseButton.FORWARD)
action.pointer_action.pointer_up(MouseButton.FORWARD)
action.perform()
assert driver.title == "We Arrive Here"
def test_double_click(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
clickable = driver.find_element(By.ID, "clickable")
ActionChains(driver) \
.double_click(clickable) \
.perform()
assert driver.find_element(By.ID, "click-status").text == "double-clicked"
def test_hover(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
hoverable = driver.find_element(By.ID, "hover")
ActionChains(driver) \
.move_to_element(hoverable) \
.perform()
assert driver.find_element(By.ID, "move-status").text == "hovered"
def test_move_by_offset_from_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
mouse_tracker = driver.find_element(By.ID, "mouse-tracker")
ActionChains(driver) \
.move_to_element_with_offset(mouse_tracker, 8, 0) \
.perform()
coordinates = driver.find_element(By.ID, "relative-location").text.split(", ")
assert abs(int(coordinates[0]) - 100 - 8) < 2
def test_move_by_offset_from_viewport_origin_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "absolute-location")))
action = ActionBuilder(driver)
action.pointer_action.move_to_location(8, 0)
action.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 8) < 2
def test_move_by_offset_from_current_pointer_ab(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
action = ActionBuilder(driver)
action.pointer_action.move_to_location(6, 3)
action.perform()
ActionChains(driver) \
.move_by_offset(13, 15) \
.perform()
coordinates = driver.find_element(By.ID, "absolute-location").text.split(", ")
assert abs(int(coordinates[0]) - 6 - 13) < 2
assert abs(int(coordinates[1]) - 3 - 15) < 2
def test_drag_and_drop_onto_element(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
droppable = driver.find_element(By.ID, "droppable")
ActionChains(driver) \
.drag_and_drop(draggable, droppable) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
def test_drag_and_drop_by_offset(driver):
driver.get('https://selenium.dev/selenium/web/mouse_interaction.html')
draggable = driver.find_element(By.ID, "draggable")
start = draggable.location
finish = driver.find_element(By.ID, "droppable").location
ActionChains(driver) \
.drag_and_drop_by_offset(draggable, finish['x'] - start['x'], finish['y'] - start['y']) \
.perform()
assert driver.find_element(By.ID, "drop-status").text == "dropped"
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Show full example
using System;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
namespace SeleniumDocs.ActionsAPI
{
[TestClass]
public class MouseTest : BaseChromeTest
{
[TestMethod]
public void ClickAndHold()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ClickAndHold(clickable)
.Perform();
Assert.AreEqual("focused", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void ClickAndRelease()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("click"));
new Actions(driver)
.Click(clickable)
.Perform();
Assert.IsTrue(driver.Url.Contains("resultPage.html"));
}
[TestMethod]
public void RightClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.ContextClick(clickable)
.Perform();
Assert.AreEqual("context-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void BackClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
Assert.AreEqual("We Arrive Here", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Back));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Back));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
}
[TestMethod]
public void ForwardClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
driver.FindElement(By.Id("click")).Click();
driver.Navigate().Back();
Assert.AreEqual("BasicMouseInterfaceTest", driver.Title);
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerDown(MouseButton.Forward));
actionBuilder.AddAction(mouse.CreatePointerUp(MouseButton.Forward));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
Assert.AreEqual("We Arrive Here", driver.Title);
}
[TestMethod]
public void DoubleClick()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement clickable = driver.FindElement(By.Id("clickable"));
new Actions(driver)
.DoubleClick(clickable)
.Perform();
Assert.AreEqual("double-clicked", driver.FindElement(By.Id("click-status")).Text);
}
[TestMethod]
public void Hovers()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement hoverable = driver.FindElement(By.Id("hover"));
new Actions(driver)
.MoveToElement(hoverable)
.Perform();
Assert.AreEqual("hovered", driver.FindElement(By.Id("move-status")).Text);
}
[TestMethod]
[Obsolete("Obsolete")]
public void MoveByOffsetFromTopLeftOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCenterOfElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement tracker = driver.FindElement(By.Id("mouse-tracker"));
new Actions(driver)
.MoveToElement(tracker, 8, 0)
.Perform();
string[] result = driver.FindElement(By.Id("relative-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 100 - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromViewport()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 0, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8) < 2);
}
[TestMethod]
public void MoveByOffsetFromCurrentPointerLocation()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
ActionBuilder actionBuilder = new ActionBuilder();
PointerInputDevice mouse = new PointerInputDevice(PointerKind.Mouse, "default mouse");
actionBuilder.AddAction(mouse.CreatePointerMove(CoordinateOrigin.Viewport,
8, 12, TimeSpan.Zero));
((IActionExecutor)driver).PerformActions(actionBuilder.ToActionSequenceList());
new Actions(driver)
.MoveByOffset(13, 15)
.Perform();
string[] result = driver.FindElement(By.Id("absolute-location")).Text.Split(", ");
Assert.IsTrue(Math.Abs(int.Parse(result[0]) - 8 - 13) < 2);
Assert.IsTrue(Math.Abs(int.Parse(result[1]) - 12 - 15) < 2);
}
[TestMethod]
public void DragToElement()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
IWebElement droppable = driver.FindElement(By.Id("droppable"));
new Actions(driver)
.DragAndDrop(draggable, droppable)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
[TestMethod]
public void DragByOffset()
{
driver.Url = "https://selenium.dev/selenium/web/mouse_interaction.html";
IWebElement draggable = driver.FindElement(By.Id("draggable"));
Point start = draggable.Location;
Point finish = driver.FindElement(By.Id("droppable")).Location;
new Actions(driver)
.DragAndDropToOffset(draggable, finish.X - start.X, finish.Y - start.Y)
.Perform();
Assert.AreEqual("dropped", driver.FindElement(By.Id("drop-status")).Text);
}
}
}
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
Show full example
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Mouse' do
let(:driver) { start_session }
it 'click and hold' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.click_and_hold(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'focused'
end
it 'click and release' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'click')
driver.action
.click(clickable)
.perform
expect(driver.current_url).to include 'resultPage.html'
end
describe 'alternate button clicks' do
it 'right click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.context_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'context-clicked'
end
it 'back click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
expect(driver.title).to eq('We Arrive Here')
driver.action
.pointer_down(:back)
.pointer_up(:back)
.perform
expect(driver.title).to eq('BasicMouseInterfaceTest')
end
it 'forward click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.find_element(id: 'click').click
driver.navigate.back
expect(driver.title).to eq('BasicMouseInterfaceTest')
driver.action
.pointer_down(:forward)
.pointer_up(:forward)
.perform
expect(driver.title).to eq('We Arrive Here')
end
end
it 'double click' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
clickable = driver.find_element(id: 'clickable')
driver.action
.double_click(clickable)
.perform
expect(driver.find_element(id: 'click-status').text).to eq 'double-clicked'
end
it 'hovers' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
hoverable = driver.find_element(id: 'hover')
driver.action
.move_to(hoverable)
.perform
expect(driver.find_element(id: 'move-status').text).to eq 'hovered'
end
describe 'move by offset' do
it 'offset from element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.scroll_to(driver.find_element(id: 'bottom')).perform
mouse_tracker = driver.find_element(id: 'mouse-tracker')
driver.action
.move_to(mouse_tracker, 8, 11)
.perform
rect = mouse_tracker.rect
center_x = rect.width / 2
center_y = rect.height / 2
x_coord, y_coord = driver.find_element(id: 'relative-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(center_x + 8)
expect(y_coord).to be_within(1).of(center_y + 11)
end
it 'offset from viewport' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action
.move_to_location(8, 12)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8)
expect(y_coord).to be_within(1).of(12)
end
it 'offset from current pointer location' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
driver.action.move_to_location(8, 11).perform
driver.action
.move_by(13, 15)
.perform
x_coord, y_coord = driver.find_element(id: 'absolute-location').text.split(',').map(&:to_i)
expect(x_coord).to be_within(1).of(8 + 13)
expect(y_coord).to be_within(1).of(11 + 15)
end
end
it 'drags to another element' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
droppable = driver.find_element(id: 'droppable')
driver.action
.drag_and_drop(draggable, droppable)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
it 'drags by an offset' do
driver.get 'https://www.selenium.dev/selenium/web/mouse_interaction.html'
draggable = driver.find_element(id: 'draggable')
start = draggable.rect
finish = driver.find_element(id: 'droppable').rect
driver.action
.drag_and_drop_by(draggable, finish.x - start.x, finish.y - start.y)
.perform
expect(driver.find_element(id: 'drop-status').text).to include('dropped')
end
end
const draggable = driver.findElement(By.id("draggable"));
let start = await draggable.getRect();
let finish = await driver.findElement(By.id("droppable")).getRect();
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, {x: finish.x - start.x, y: finish.y - start.y}).perform();
Show full example
const {By, Builder} = require('selenium-webdriver');
const assert = require('assert');
describe('Drag and Drop', function () {
let driver;
before(async function () {
driver = new Builder().forBrowser('chrome').build();
});
after(async () => await driver.quit());
it('By Offset', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const draggable = driver.findElement(By.id("draggable"));
let start = await draggable.getRect();
let finish = await driver.findElement(By.id("droppable")).getRect();
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, {x: finish.x - start.x, y: finish.y - start.y}).perform();
let result = await driver.findElement(By.id("drop-status")).getText();
assert.deepStrictEqual('dropped', result)
});
it('Onto Element', async function () {
await driver.get('https://www.selenium.dev/selenium/web/mouse_interaction.html');
const draggable = driver.findElement(By.id("draggable"));
const droppable = await driver.findElement(By.id("droppable"));
const actions = driver.actions({async: true});
await actions.dragAndDrop(draggable, droppable).perform();
let result = await driver.findElement(By.id("drop-status")).getText();
assert.deepStrictEqual('dropped', result)
});
});
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Show full example
package dev.selenium.actions_api
import dev.selenium.BaseTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
import org.openqa.selenium.By
import org.openqa.selenium.Rectangle
import org.openqa.selenium.WebElement
import org.openqa.selenium.interactions.Actions
import org.openqa.selenium.interactions.PointerInput
import org.openqa.selenium.interactions.Sequence
import org.openqa.selenium.remote.RemoteWebDriver
import java.time.Duration
import java.util.Collections
class MouseTest : BaseTest() {
@Test
fun clickAndHold() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.clickAndHold(clickable)
.perform()
Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
}
@Test
fun clickAndRelease() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("click"))
Actions(driver)
.click(clickable)
.perform()
Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
}
@Test
fun rightClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.contextClick(clickable)
.perform()
Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun backClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
Assertions.assertEquals(driver.getTitle(), "We Arrive Here")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.BACK.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.BACK.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("BasicMouseInterfaceTest", driver.getTitle())
}
@Test
fun forwardClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.findElement(By.id("click")).click()
driver.navigate().back()
Assertions.assertEquals(driver.getTitle(), "BasicMouseInterfaceTest")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerDown(PointerInput.MouseButton.FORWARD.asArg()))
.addAction(mouse.createPointerUp(PointerInput.MouseButton.FORWARD.asArg()))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Assertions.assertEquals("We Arrive Here", driver.getTitle())
}
@Test
fun doubleClick() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val clickable = driver.findElement(By.id("clickable"))
Actions(driver)
.doubleClick(clickable)
.perform()
Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
}
@Test
fun hovers() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val hoverable = driver.findElement(By.id("hover"))
Actions(driver)
.moveToElement(hoverable)
.perform()
Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
}
@Test
fun moveByOffsetFromElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
driver.manage().window().fullscreen()
val tracker = driver.findElement(By.id("mouse-tracker"))
Actions(driver)
.moveToElement(tracker, 8, 0)
.perform()
val result = driver.findElement(By.id("relative-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 100 - 8) < 2)
}
@Test
fun moveByOffsetFromViewport() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 12))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 12) < 2)
}
@Test
fun moveByOffsetFromCurrentPointer() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val mouse = PointerInput(PointerInput.Kind.MOUSE, "default mouse")
val actions = Sequence(mouse, 0)
.addAction(mouse.createPointerMove(Duration.ZERO, PointerInput.Origin.viewport(), 8, 11))
(driver as RemoteWebDriver).perform(Collections.singletonList(actions))
Actions(driver)
.moveByOffset(13, 15)
.perform()
val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
Assertions.assertTrue(Math.abs(Integer.parseInt(result[0]) - 8 - 13) < 2)
Assertions.assertTrue(Math.abs(Integer.parseInt(result[1]) - 11 - 15) < 2)
}
@Test
fun dragsToElement() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val droppable = driver.findElement(By.id("droppable"))
Actions(driver)
.dragAndDrop(draggable, droppable)
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
@Test
fun dragsByOffset() {
driver.get("https://www.selenium.dev/selenium/web/mouse_interaction.html")
val draggable = driver.findElement(By.id("draggable"))
val start = draggable.getRect()
val finish = driver.findElement(By.id("droppable")).getRect()
Actions(driver)
.dragAndDropBy(draggable, finish.getX() - start.getX(), finish.getY() - start.getY())
.perform()
Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
}
}