Элемент не движется внутри холста - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь переместить элемент в пределах холста, но так или иначе это не происходит.

Код, который я пробовал:

        Actions actions = new Actions(driver);
        actions.moveToElement(flowCanvas, 434, 177);
        actions.clickAndHold();
        actions.moveToElement(flowCanvas, 592 , 373);
        actions.release();
        actions.perform();

Мой xpath:

   @FindBy(xpath = "//div[@id='diagramDiv']//canvas")
    protected WebElement flowCanvas;

URL-адрес, на котором я пытаюсь: https://gojs.net/latest/samples/panelLayout.html

Я использую селенвеб-драйвер и Java.Я не получаю никакой ошибки в приведенном выше коде, но он также не перемещает элемент.

Пытается переместить следующий элемент:

enter image description here

Ответы [ 3 ]

0 голосов
/ 31 января 2019

По сути, проблема заключается в том, какие координаты вы используете, и в реализации вашего драйвера bowser / web-драйвера.Спецификация W3C гласит, что смещение команд Action находится от центра элемента.Но не все реализации веб-драйверов следуют этому.Таким образом, в основном moveToElement x и y смещения для драйвера геккона (Firefox) рассчитываются от центра элемента в вашем случае от центра холста, но для Chrome Driver (Google Chrome) кординаты вычисляются из левого верхнего угла,Поэтому, если вам нужна поддержка перетаскивания, вам понадобится что-то вроде этого.

WebDriver driver = getDriver();

driver.get("https://gojs.net/latest/samples/panelLayout.html");
WebElement flowCanvas = driver.findElement(By.xpath("//div[@id='myDiagramDiv']//canvas"));

if(isGoogleChrome()){
    new Actions(driver)
   .moveToElement(flowCanvas, 100, 125).clickAndHold()
   .moveToElement(flowCanvas, 150, 175).release()
   .perform();
} else if (isFireFox()){
    new Actions(driver)
    .moveToElement(flowCanvas, -50, -50).clickAndHold()
    .moveToElement(flowCanvas, 100, 100).release()
    .perform();
}

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

0 голосов
/ 01 февраля 2019

Я пытался переместить этот объект с помощью Sikuli, и это сработало как заклинание.Пожалуйста, проверьте фрагмент ниже.

    Pattern p = new Pattern("Win/AboutScreen/Move.PNG");
    Region r1 = screen.exists(p);
    r1.hover();
    r1.mouseDown(Button.LEFT);
    r1.mouseMove(50, 50);
    r1.mouseUp(Button.LEFT); 

Вам нужно сохранить скриншот в каком-то месте и указать путь.hover(); метод найдет экран и курсор мыши на нем.mouseDown(Button.LEFT) будет удерживать нажатой левую кнопку, а последний mouserMove(50,50) будет перемещать элемент в координаты.

Очень просто установить Sikuli, если вы используете проект Maven, тогда просто добавьте одну простую зависимость, и все готово.

Надеюсь, эта помощь:)

0 голосов
/ 24 января 2019

Попробуйте комбинацию действий и действий

Actions builder = new Actions(driver);
Action moveAction = builder.moveToElement(flowCanvas,434,177)  
                 .click()
                 .moveByOffset(592, 373) 
                 .doubleClick()
                 .build();
moveAction.perform();
...