Java 无法使用Robot拖放Selenium WebDriver

Java 无法使用Robot拖放Selenium WebDriver,java,selenium-webdriver,drag-and-drop,awt,awtrobot,Java,Selenium Webdriver,Drag And Drop,Awt,Awtrobot,我正在尝试使用Robot框架自动化拖放功能。为了实现这一点,我编写了以下代码: WebDriver driver = new FirefoxDriver(); driver.get("http://the-internet.herokuapp.com/drag_and_drop"); WebElement source = driver.findElement(By.id("column-a")); WebElement target = driver.findElement(By.id("c

我正在尝试使用Robot框架自动化拖放功能。为了实现这一点,我编写了以下代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://the-internet.herokuapp.com/drag_and_drop");

WebElement source = driver.findElement(By.id("column-a"));
WebElement target = driver.findElement(By.id("column-b"));

Robot robot = new Robot();
robot.mouseMove(source.getLocation().getX() + (source.getSize().getWidth()/2), source.getLocation().getY() + (source.getSize().getHeight()/2));
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseMove(target.getLocation().getX() + (target.getSize().getWidth()/2), target.getLocation().getY() + (target.getSize().getHeight()/2));
robot.mouseRelease(InputEvent.BUTTON1_MASK);
Thread.sleep(3000);

执行上面的代码,我可以看到鼠标同时移动到源和目标,但并没有发生拖放。您能告诉我我做错了什么吗?

您可以尝试使用此方法-要获取源代码,请将其嵌入您的代码中:

  WebElement source = driver.findElement(By.xpath("//*[@id='column-a']"));
  Locatable element = (Locatable)source;
  Point p= element.getCoordinates().inViewPort();
  int sourceX=p.getX()+25;(25 can be increased or decreased accordingly) 
  int sourceY=p.getY()+120;(120 can be increased or decreased accordingly)
  WebElement target = driver.findElement(By.id("column-b"));         
  Locatable elementTarget = (Locatable)target;
  Point Target= elementTarget.getCoordinates().inViewPort();
  int targetX=Target.getX()+55;
  int targetY=Target.getY()+150;
对于目的地,请将其与您的代码嵌入:

  WebElement source = driver.findElement(By.xpath("//*[@id='column-a']"));
  Locatable element = (Locatable)source;
  Point p= element.getCoordinates().inViewPort();
  int sourceX=p.getX()+25;(25 can be increased or decreased accordingly) 
  int sourceY=p.getY()+120;(120 can be increased or decreased accordingly)
  WebElement target = driver.findElement(By.id("column-b"));         
  Locatable elementTarget = (Locatable)target;
  Point Target= elementTarget.getCoordinates().inViewPort();
  int targetX=Target.getX()+55;
  int targetY=Target.getY()+150;

我对JTable和JList都有类似的问题

对于桌子,我必须把桌子拖得足够远,否则它永远不会变成拖拽的姿势

用一个列表,我不仅需要走得足够远,而且必须在中间增加一个点,并在那里停留足够长的时间,让它意识到发生了什么。否则,它会尝试使用零长度的DataFlavor数组将其放到那里

最后机器人代码如下:

public void dragAndDrop(Point start, Point end) {
        // Press
        mouseMove(start.x, start.y);
        delay(100);
        mousePress(MouseEvent.BUTTON1_MASK);
        delay(500);
        // Drag - through a way point, so this will work on JLists - make sure you linger long enough at the way point too!
        mouseMove(start.x - (start.x - end.x)/2, start.y - (start.y - end.y)/2);
        delay(500);
        mouseMove(end.x, end.y);
        delay(1000); // So you can see what is happening
        mouseRelease(MouseEvent.BUTTON1_MASK);
        // Wait (copied from other code)
        waitForIdle();
        delay(200);
    }

您添加了“robotframework”标记,但这似乎与robotframework.org中的robot框架无关。您的解决方案可能在这里工作,但您的代码使用的是硬编码值,如果我们将该代码放在一个方法中,并尝试在不同的测试中使用该方法,则无法工作。