1

我想模拟一个简单的鼠标单击并在 svg 元素中拖动。我设法获得了起点和终点的坐标,包括绝对(窗口坐标)和相对于封装 svg 元素的坐标。这是我用来模拟鼠标的代码:

    Actions builder = new Actions(driver);
    builder.moveToElement(area, xStart, yStart);
    builder.clickAndHold();
    builder.moveToElement(area, xStop, yStop);
    builder.release();

    Action setFilter = builder.build();
    setFilter.perform();

其中 area 是代表我的 svg 的 WebElement,坐标相对于该元素。注意:

    area.getLocation(); // returns null

这让我想知道 webdriver 是否能够找到该元素。所以我尝试了绝对坐标:

    Actions builder = new Actions(driver);
    builder.moveByOffset(chart.getLocation().x + xStart, chart.getLocation().y + yStart);
    builder.clickAndHold();
    builder.moveByOffset(xStop - xStart, yStop - yStart);
    builder.release();

    Action setFilter = builder.build();
    setFilter.perform();

其中 chart 是围绕 svg 元素的 div(请注意,div 位置和 svg 位置之间的偏移量仅为 10 像素,并不重要)。那也不起作用,我也尝试了与 div 的相对位置,但仍然没有运气。

我在这里做错了什么?

4

1 回答 1

0

我得到了一个破解它的工作,但它需要在前台打开网页。如果您同时做其他事情,它可能会破坏测试,我不能说如果远程运行它是否会起作用。

这是它的样子:

  Robot robert = new Robot();
  robert.mouseMove(xStart, yStart);
  // full click once to get focus on the window
  robert.mousePress(MouseEvent.BUTTON1_MASK);
  robert.mouseRelease(MouseEvent.BUTTON1_MASK);
  // then set the filter
  robert.mousePress(MouseEvent.BUTTON1_MASK);
  robert.mouseMove(xStop, yStop);
  robert.mouseRelease(MouseEvent.BUTTON1_MASK);
于 2013-04-26T09:18:10.180 回答