1

我正在尝试将对象从一个位置拖动到 iframe 中的另一个位置。

但我得到了 movetargetoutofboundsexception。如何找到可以将对象移动到的坐标?

线程“main”中的异常org.openqa.selenium.interactions.MoveTargetOutOfBoundsException:给定坐标 (552, 440) 在文档之外。错误::MoveTargetOutOfBoundsError目标位置(552、440)不在网页上。

FirefoxProfile prof = new FirefoxProfile();
prof.setEnableNativeEvents(true);
WebDriver driver = new FirefoxDriver(prof);

driver.get("http://jqueryui.com/draggable/");
driver.manage().window().maximize();

// WebElement frame1 = driver.findElement(By.xpath("//*[@id='content']/iframe"));
// System.out.println(frame1.getLocation());

driver.switchTo().frame(0);
Actions act = new Actions(driver);

WebElement src = driver.findElement(By.xpath("//div[@id='draggable']"));
System.out.println(src.getText());

act.dragAndDropBy(src, 474, 360).build().perform();
4

1 回答 1

0

您的代码或多或少没问题。

唯一错误的是可能进行的移动量。如果您将偏移量降低到 100 像素,它就会起作用。我发现最大值(在我的计算机的 Firefox 上)是 572 和 338 像素。

现在,这些数字不是随机的。如果你打印出<iframe>元素的大小,你会得到(584, 350). 如果你打印出draggable元素在 中的初始位置<iframe>,你会得到(8, 8). 当你减去这些时,你会得到 576 和 342 像素,这与我们的经验结果非常接近。实际上,它在两个方向上都相差 4 px。老实说,我不知道那 4 px 是从哪里来的。这可能是某种边界。

只有一件事是确定的。出于显而易见的原因,WebDriver 确保您不会将元素拖出当前所在的框架。

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();

driver.get("http://jqueryui.com/draggable/");

WebElement iFrame = driver.findElement(By.tagName("iframe"));
System.out.println(iFrame.getSize());
driver.switchTo().frame(iFrame);

WebElement draggable = driver.findElement(By.id("draggable"));
System.out.println(draggable.getLocation());
new Actions(driver).dragAndDropBy(draggable, 572, 338).perform();
于 2013-09-12T01:30:40.260 回答