BH     TT     Selenium     Класс Actions

Actions actions = new Actions(driver);
actions.clickAndHold();

click()
sendKeys()
clickAndHold         //   Зажать кнопку мыши и не отпускать
moveToElement/moveByOffset         //   Переместить курсор на другой элемент или на указанное расстояние в пикселях
release         //   Отпустить кнопку мыши
keyDown         //   Нажать клавишу
keyUp         //   Отпустить клавишу


// docs для класса Actions

Методы по 2 раза --> С параметром и без
        --   Базовая команда без параметра выполняет клик в текущем положении курсора
        --   Команда с параметром выполняется в 2 действия:
                Выполняется перемещение мыши в центр переданного элемента (Фокус)
                Выполняется действие

Команды с параметрами x/y- offset перемещают курсор не на центр элемента, а на указанный сдвиг (см. видео 8:00) --> Сдвигает курсор относительно чего-то

Команда pause() наверняка будет использоваться и в будущем. Deprecated отменят

Команда moveToElement cxbnftn cldbu jnzjcbntkmzj ktdjuj dthüztuj eukf

Чтобы считалось от центра надо выполнить 2 команды:
        moveToElement(el)
        moveByOffset(5,5)
то есть сначала поставить курсор в центр, а потом сдвинуть на нужное расстояние

Просто навести мышу на элемент (Например при работе с всплывающим меню) --> Навести мышу на основной элемент --> Навести на всплывающее меню --> ...

Команда .dragAndDrop(el1, el2) будет автоматически развёрнут в цепочки из 4 простых действий


// 2 механизма (подхода) симуляции действий мыши и клавы

        1.   do what I mean --> Делай то что я хочу (Имею ввиду) // click() и sendKeys()

        2.   do what I say --> Делай то что я говорю // Advanced Interaction API // Класс Actions , который реализует сложные действия

В Java и C# -- Класс Actions
В Python -- Класс ActionsChains
Rubi и JavaScript как-то по другому


Ссылки

Java:   seleniumhq.github.io

C#:   seleniumhq.github.io

Python:   seleniumhq.github.io

Ruby:   seleniumhq.github.io

JavaScript:   seleniumhq.github.io

Примеры кода

Java

import org.openqa.selenium.interactions.Actions;
//...
new Actions(driver)
        .moveToElement(drag)
        .clickAndHold()
        .moveToElement(drop)
        .release()
        .perform();


C#

new Actions(driver)
        .MoveToElement(drag)
        .ClickAndHold()
        .MoveToElement(drop)
        .Release()
        .Perform();


Python

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).move_to_element(drag).click_and_hold().move_to_element(drop).release().perform()


Ruby

@driver.action.move_to_element(drag).click_and_hold().move_to_element(drop).release().perform


JavaScript

driver.actions()
        .moveToElement(drag)
        .clickAndHold()
        .moveToElement(drop)
        .release()
        .perform();