我正在开发Liferay 6.2项目。在Liferay中,他们使用了Vaadin。当我点击一个按钮时,它会打开一个不同的iframe。我可以编写所有功能。现在我想使用WebDriver将光标移动到iframe元素。因为当我将鼠标移动到iframe复选框后,我的自动脚本可以运行。我想自动化脚本以将鼠标指针移动到元素。
我已经尝试过以下代码,但它不起作用。
1)使用Action moveToElement
:
driver.findElement(By.xpath("element1")).click();
new Actions(driver).moveToElement(driver.findElement(By.xpath("element2"))).click().perform();
2)使用mouseMove
WebElement element = driver.findElement(By.xpath("element xpath"));
Locatable hoverItem = (Locatable) element;
Mouse mouse = ((HasInputDevice) driver).getMouse();
mouse.mouseMove(hoverItem.getCoordinates());
错误:((HasInputDevice)驱动程序中出错)。 HasInputDevice无法解析为类型
3)
Locatable hoverItem = (Locatable) driver.findElement(By.xpath("element xpath"));
int y = hoverItem.getCoordinates().getLocationOnScreen().getY();
((JavascriptExecutor)driver).executeScript("window.scrollBy(0,"+y+");");
错误:在getLocationOnScreen()中出错 对于类型坐标
,方法getLocationOnScreen()未定义
4)
Point coordinates = driver.findElement(By.xpath("element xpath")).getLocation();
Robot robot = new Robot();
WebElement markNews = driver.findElement(By.xpath("element xpath"));
markNews.click();
robot.mouseMove(coordinates.x,coordinates.y+80);
这不起作用。
我只想将光标指针移动到iframe定位器。
答案 0 :(得分:1)
您可以使用以下方式直接选择iframe:
driver.switchTo().frame(driver.findElement(By.id("frameId")));
现在,通过使用selenium web驱动程序,您可以在此iframe中执行任何操作。
要返回主窗口,您只需:
driver.switchTo().defaultContent();
答案 1 :(得分:1)
是:
HasInputDevices
(设备是复数)
答案 2 :(得分:1)
我想到了你的第一个例子:
new Actions(driver).moveToElement(driver.findElement(By.xpath("element2"))).click().perform();
应阅读:
new Actions(driver).moveToElement(driver.findElement(By.xpath("element2"))).build().perform().click();
也就是说,首先找到元素,然后构建一系列要对其执行的操作(在本例中只是一个)然后执行这些操作(现在鼠标应该在元素上)然后单击
答案 3 :(得分:0)
您可以使用名为Sikuli的工具直接集成到Selenium中:
示例代码:
import org.sikuli.script.Button;
import org.sikuli.script.FindFailed;
import org.sikuli.script.Location;
import org.sikuli.script.Match;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
Screen screen = new Screen();
// Find where you want to move the mouse and set a location
Location wheelPoint = new Location(1000, 800);
// You can always just get center as well
// Location wheelCenter = screen.getCenter();
try {
screen.wheel(wheelPoint, Button.WHEEL_DOWN, steps);
} catch (Exception e) {
Assert.fail("Mouse did not move to desired location");
}