Как используя WebDriver vs javaScript кликать в конкретные точки canvas элемента

Вот такой код, находит санвас и кликает в его центре. (Как и на любом другом элементе)

var canvas = driver.findElement(By.xpath(".//*[@id=‘mainCanvas’]/div/div[1]/canvas"));
driver.actions().mouseMove({‘x’: 100, ‘y’: 100}).click(canvas).perform();

Игнорируя координаты.

Вопрос! Как кликать в конкретную координату на канвасе?

Я чет не понял логику экшена, т.е. перемещаем мышь в координаты 100, 100, а потом кликаем по элементу канваса (ведрайвер вроде кликает по умолчанию по центру элемента), еще раз гляньте на логику.
По правильному логика должна быть такая:

  1. перемещаем мышь в левый верхний угол элемента (вроде по умолчанию мовемаус туда перемещает если передать элемент)
  2. перемещаем мышь на нужное кол-во куда надо, не знаю тут есть ли относительное смещение
  3. кликаем левой кнопкой мыши
  4. освобождаем клик
  5. перформ
driver.actions()
    .mouseMove(canvas, {
        x: 100,
        y: 50
    })
    .click()
    .perform()
2 лайка

Я написал, что кликает в центре. Логика примерно понятна. Как реализовать это в коде?

Работает! :scream:
Обьясните не знающим, в чем разница между моей записью и вашей?? Я имею в виду только размещение canvas играет роль?

Там все просто:

.mouseMove(canvas, {
        x: 100,
        y: 50
    })

перемещаем мышку относительно левого верхнего угла элемента canvas на 100 точек в право и 50 точек в низ…
это п.1 и п.2 в одном лице :slight_smile:

Читайте документацию. Вот в чем разница.
mouseMove() принимает два параметра на входе. Сам вебэлемент (или координаты) и координаты смещения (offset). Вы передали какие-то координаты.

this.mouseMove( location, opt_offset )

click() - может принимать webelement, вот вы ему и скормили webelement и кликнули по его центру, а до него сделали смещение mouseMove(), которое уже роли не играет.

this.click( opt_elementOrButton, opt_button )

http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/actions_exports_ActionSequence.html#mouseMove

Ребята, подскажите, а если canvas длиннющий и прячется под скроллом, что можно придумать.

Купить widescreen 4k монитор)))

Спасибо! Подскажите ресурсы, где можно поучиться автоматизации с нуля на webdriver + js.

А какой фреймворк используется?

Цель - автоматизация фронтенда игры на JS. И возможно бекенда.

Фреймворк. Пока никакой. что посоветуете?

Ничего не посоветую.
Посоветую бежать от JS ))).
Перейти на Python(pytest)/Java(selenide).

почему не JS?

Слишком много танцев.