如何使用WebDriver移动光标位置

时间:2013-12-24 10:36:26

标签: java selenium selenium-webdriver

我正在开发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定位器。

4 个答案:

答案 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中:

Sikuli Install Info

示例代码:

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");
}