Получите расположение WebElement на экране, используя JAVA - PullRequest
2 голосов
/ 27 апреля 2020

Один вкладыш - Как получить экранные координаты веб-элемента с помощью Java / Selenium

У меня есть элемент на странице, который постоянно перемещается в случайных положениях, я хотел бы щелкнуть текстовое поле с помощью Selenium (что достижимо с помощью findElement (By.id ("btn")). click), но я бы хотел использовать здесь класс Robot и перейти к конкретному WebElement, используя его координаты .

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить координаты " на экране " для WebElement динамически, что затрудняет мне использование класса роботов

* 1010. * Я пытался использовать класс Point
Point coordinates = driver.findElement(By.id("btn")).getLocation();
int x = coordinates.getX();
int y = coordinates.getY();

Но если я использую их значения в классе Robot, используя метод ниже, указатель перемещается в положение немного дальше, чем заданные координаты, и это, по-видимому, потому что текущие координаты находятся на уровне браузера, тогда как метод mouseMove находится на уровне экрана

Robot robot = new Robot();
robot.mouseMove(x, y);
robot.mousePress(InputEvent.BUTTON1_MASK);

Ниже приведен фрагмент о том, как работает страница, и вы также можете загрузить файл HTML , если хотите поиграть с ним

var btn = document.getElementById("btn");
btn.style.top = Math.floor((Math.random() * 230) + 1) + "px";
btn.style.left = Math.floor((Math.random() * 200) + 1) + "px";
input[type='text'] {
       position: absolute;
  }
<input placeholder="Click Here to Type Something" type="text" id="btn" name="fname">

1 Ответ

1 голос
/ 29 апреля 2020

Как вы указали, проблема root в том, что метод getLocation() возвращает значение относительно верхнего левого угла страницы, но вы не знаете, где оно находится в экранных координатах.

Если ваш браузер развернут, проблема несколько проще, поскольку вы знаете, где на экране находится верхняя часть браузера. В полноэкранном режиме все еще проще, поскольку вкладки браузера и адресная строка находятся в стороне.

В Chrome в автоматических тестах единственное, что находится между верхней частью, страницей и экраном, это «Chrome контролируется программным обеспечением автоматического тестирования». предупреждающая строка.

Таким образом, один из подходов к решению этой проблемы состоит в том, чтобы войти в полноэкранный режим: driver.manage().window().fullscreen(); и затем использовать постоянное смещение по y, которое вы можете найти методом проб и ошибок в своих расчетах местоположения.

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