Как щелкнуть по центру холста в Java Selenium Driver? - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь написать код для щелчка по центру холста на веб-странице.

Вот код ниже:

private static void clickCanvasCenter() {
    WebElement we = driver.findElement(By.tagName("canvas"));
    int x = we.getSize().width/2;
    int y = we.getSize().height/2;

    Actions builder = new Actions(driver).moveToElement(new WebDriverWait(driver,20)
                .until(ExpectedConditions.elementToBeClickable(we)));

    System.out.println("width:" + x + "\theight:" + y);
    builder.click().build().perform();
    System.out.println("clicked:1");

    builder.moveByOffset(x, y).click().build().perform();
    System.out.println("clicked:2");
}

и вывод:

width:683   height:341
clicked:1
Exception in thread "main" org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: move target out of bounds
  (Session info: chrome=79.0.3945.130)

В приведенном выше коде это, если я не двигал мышь с помощью moveByOffset () метод, действие щелчка может быть выполнено (потому что вы можете увидеть «clicked: 1»), однако оно не щелкнуло по центру элемента canvas. Если я попытался навести курсор мыши на элемент canvas, возникло исключение.

Как заставить его работать и щелкнуть центр элемента canvas?

1 Ответ

0 голосов
/ 10 февраля 2020

Соответствующее Дерево DOM помогло бы нам построить канонический ответ. Однако при работе с <canvas> элементами вам необходимо учесть несколько вещей:

  • В верхнем левом углу <canvas> есть координаты (0, 0), а
  • Используя команды класса W3 C Действие , смещения от центра элемента.

Обычно элемент <canvas> будет иметь следующие атрибуты:

  • width
  • height
  • style, содержащие атрибуты width, height, et c

Например:

<canvas id="canvas" width="227" height="294" style="position: absolute; display: block; background-color: rgb(255, 255, 255); width: 227.53px; height: 294px;"></canvas>

Теперь, чтобы щелкнуть по центру элемента <canvas> на веб-странице, вам действительно не нужно вычислять:

  • we.getSize().width/2;
  • we.getSize().height/2;

As:

Текущая реализация Action класса команды, смещения от центра элемента.

Итак, вы можете использовать следующее решение:

WebElement canvas = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.id("canvas")));
//clicking on the centre
new Actions(driver).moveToElement(canvas).click().build().perform();

Incase, вы хотите нажать на смещение, вам нужно используйте moveByOffset() следующим образом:

* 10 60 *

Ссылка

Соответствующее подробное обсуждение можно найти в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...