Java 无法使用Robot拖放Selenium WebDriver
我正在尝试使用Robot框架自动化拖放功能。为了实现这一点,我编写了以下代码: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
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框架无关。您的解决方案可能在这里工作,但您的代码使用的是硬编码值,如果我们将该代码放在一个方法中,并尝试在不同的测试中使用该方法,则无法工作。