[英]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.