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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/clickAndHold.spec.js
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(); }); });
.clickAndHold(clickable) .perform() Assertions.assertEquals("focused", driver.findElement(By.id("click-status")).getText())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/clickAndRelease.spec.js
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(); }); });
.click(clickable) .perform() Assertions.assertTrue(driver.getCurrentUrl()!!.contains("resultPage.html"))
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/rightClick.spec.js
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`) }); });
.contextClick(clickable) .perform() Assertions.assertEquals("context-clicked", driver.findElement(By.id("click-status")).getText())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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));
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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());
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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()
/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js
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 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())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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));
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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());
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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()
/examples/javascript/test/actionsApi/mouse/backAndForwardClick.spec.js
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 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())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/doubleClick.spec.js
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`) }); });
.doubleClick(clickable) .perform() Assertions.assertEquals("double-clicked", driver.findElement(By.id("click-status")).getText())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/moveToElement.spec.js
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`) }); });
.moveToElement(hoverable) .perform() Assertions.assertEquals("hovered", driver.findElement(By.id("move-status")).getText())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
const {By, Origin, Builder, until } = 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.wait(until.elementTextContains(await driver.findElement(By.id('relative-location')), ","), 2000); 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) }); });
.moveToElement(tracker, 8, 0) .perform() val result = driver.findElement(By.id("relative-location")).getText().split(", ")
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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));
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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());
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
const {By, Origin, Builder, until } = 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.wait(until.elementTextContains(await driver.findElement(By.id('relative-location')), ","), 2000); 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 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(", ")
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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()
/examples/javascript/test/actionsApi/mouse/moveByOffset.spec.js
const {By, Origin, Builder, until } = 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.wait(until.elementTextContains(await driver.findElement(By.id('relative-location')), ","), 2000); 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) }); });
.perform() val result = driver.findElement(By.id("absolute-location")).getText().split(", ")
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js
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) }); });
Actions(driver) .dragAndDrop(draggable, droppable) .perform() Assertions.assertEquals("dropped", driver.findElement(By.id("drop-status")).getText())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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();
/examples/java/src/test/java/dev/selenium/actions_api/MouseTest.java
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()
/examples/python/tests/actions_api/test_mouse.py
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();
/examples/dotnet/SeleniumDocs/ActionsAPI/MouseTest.cs
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
/examples/ruby/spec/actions_api/mouse_spec.rb
# 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();
/examples/javascript/test/actionsApi/mouse/dragAndDrop.spec.js
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 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())
examples/kotlin/src/test/kotlin/dev/selenium/actions_api/MouseTest.kt
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.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()) } }