我有一个包含iframe的页面。 iframe里面是一张桌子。当用户将鼠标移到该表上时,会出现一些元素。我想点击其中一个元素。
我认为我的第一步应该是选择iframe,然后选择moveToElement(table)。但是这会导致MoveTargetOutOfBoundsError。
奇怪的是,我可以选择iframe并点击表格。点击不会抱怨元素的x,y坐标,但moveToElement会抱怨。 为什么?(不幸的是,点击该表会执行一项操作,导致我想要消失的按钮,因此这不是一个选项。)
如何实现我的目标(选择iframe,将鼠标悬停在桌面上,等待按钮出现,点击其中一个按钮)?
版本信息:
Build info: version: '2.28.0', revision: '18309', time: '2012-12-11 15:53:30'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_37'
这是成功点击表格的java代码:
driver.switchTo().defaultContent();
driver.switchTo().frame("frameId");
WebElement e = driver.findElement(By.id("foo"));
e.click();
这是抱怨表位置的java代码:
driver.switchTo().defaultContent();
driver.switchTo().frame("frameId");
WebElement e = driver.findElement(By.id("foo"));
Actions builder = new Actions(driver);
builder.moveToElement(e).build().perform(); // error happens in moveToElement()
答案 0 :(得分:2)
我认为你必须滚动到视图中:
if (element instanceof Locatable) {
Locatable remoteElement = (Locatable) inputElement;
remoteElement.getLocationOnScreenOnceScrolledIntoView();
}
如果你想悬停在元素上,你必须扩展上面一点:
if (element instanceof Locatable) {
Locatable hoverItem = (Locatable) element;
hoverItem.getLocationOnScreenOnceScrolledIntoView();
Mouse mouse = ((HasInputDevices) webDriver).getMouse();
mouse.mouseMove(hoverItem.getCoordinates());
}