Клик по координатам без указания на сам элемент.


(AzotKzn) #1

Клик по координатам без указания элемента. Есть ли такая возможность, у Selenium? Может где-то есть готовый компонент чтобы сделать это возможным? Пожалуйста приведите пример компонента, с кусочком кода.

Здесь говорят что это невозможно, но возможно вы это смогли решить.

Или возможно есть другие системы для тестирования, веб приложений, с таким же большим функционалом и поддержкой как и Selenium.


Как кликнуть на произвольное место по координатам,например в левый верхний угол?
(Dmitry Cheremushkin) #2

Можно попробовать так:

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("$(document.elementFromPoint(x, y)).click();");

(vmaximv) #3

А че нет - берете body и через Actions и Offset кликаете.


(Dmitry Cheremushkin) #4

Из более-менее достойных альтернатив Selenium я знаю только Sahi.


(Jane Tymoschuk) #5

Достаточно реализовать свою подстановку координат, для клика важна кажется именно getAuxiliary() @return coordinates on the element relative to the top-left corner of the the page. Но лучше реализовать все smile

 Coordinates coordinates = new Coordinates() {
         @Override
         public Point onScreen() {
                return new Point(x,y);
         }

        @Override
        public Point inViewPort() {
            return new Point(x,y);
        }

        @Override
        public Point onPage() {
            return new Point(x,y);
        }

        @Override
        public Object getAuxiliary() {
            return String;
        }
    };
    ((HasInputDevices) driver).getMouse().click(coordinates);

(vmaximv) #6

А как координаты относительно десктопа считать будете?
У меня есть сомнения, что данный трик работоспособный.
Можно рабочий пример пожалуйста?


(Jane Tymoschuk) #7

если в режиме фулскрин, то можно и десктопа, а вообще у драйвера можно вытащить текущий размер окна

Или имеется ввиду как сами координаты считать? тут уж я точно не знаю )) задача-то неизвестна


(vmaximv) #8

Размер окна ничего не даст. Нужно знать куда на десктоп проецируется точка (0,0) страницы (положение окна, рамка окна, тулбары, кэпшен и т.д.).
В общем то до координат дело не доходит - ваш пример дает:

  java.lang.ClassCastException: org.openqa.selenium.Point cannot be cast to java.lang.String
org.openqa.selenium.remote.RemoteMouse.paramsFromCoordinates(RemoteMouse.java:42)
org.openqa.selenium.remote.RemoteMouse.mouseMove(RemoteMouse.java:86)
org.openqa.selenium.remote.RemoteMouse.moveIfNeeded(RemoteMouse.java:51)
org.openqa.selenium.remote.RemoteMouse.click(RemoteMouse.java:56)

(Jane Tymoschuk) #9

виновата, getAuxiliary() не Point а String = id. Вообще используется id последнего объекта к котором скролили в последний раз. здесь нужно думать какой обхект брать и насколько это принципиально на самом деле


(vmaximv) #10

Повторю еще раз свой вопрос: вы уверены, что это может работать?

Посмотрите на

Я нигде не вижу, что если мы как-нибуть переопределим onPage(), inViewport() это отразится на клике.