繁体   English   中英

如何使用带有Java的Selenium WebDriver在iframe中拖动对象

[英]How do I drag an object in an iframe using Selenium WebDriver with Java

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

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

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

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();

您的代码或多或少都可以。

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

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

只有一件事是确定的。 出于显而易见的原因,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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM