如何在Firefox中使用Selenium RC2鼠标悬停WebElement

时间:2012-06-13 21:41:58

标签: selenium selenium-rc mouseover

使用Selenium的Firefox WebDriver 2.20,我需要显示鼠标悬停在我网页链接上时出现的工具提示。

我尝试过使用Selenium的Action类来实现这一点,但是我得到了一个ClassCastException:$ Proxy7与org.openqa.selenium.internal.Locatable不兼容。这是我到目前为止所尝试的:

Actions builder = new Actions(driver);
WebElement link = driver.findElement(By.tagName("a"));
builder.moveToElement(link).build().perform();

ClassCastException发生在moveToElement()方法中,当我传递给函数的WebElement被强制转换为Locatable对象时。方法是:

public Actions moveToElement(WebElement toElement) { 
   action.addAction(new MoveMouseAction(mouse, (Locatable) toElement)); 
   return this;
}

我也尝试过以下代码,导致同样的错误:

WebElement link = driver.findElement(By.tagName("a"));
Mouse mouse = ((HasInputDevices) driver).getMouse();
mouse.mouseDown(((Locatable)link).getCoordinates());

我听说这些方法适用于以前的Firefox版本,但最近的Firefox版本没有(我使用的是FF12)。如果这是真的,有没有其他方法在Selenium中模拟鼠标悬停?任何有助于此功能工作的帮助将不胜感激!

在挖掘了一段时间并尝试不同的代码片段后,我找到了解决问题的方法。对于将来遇到此问题的任何人,我必须为Firefox驱动程序禁用本机事件,如下所示:

DesiredCapabilities cap = DesiredCapabilities.firefox();

FirefoxProfile prof = new FirefoxProfile(); 
prof.setEnableNativeEvents(false); 
cap.setCapability("firefox_profile", prof);

1 个答案:

答案 0 :(得分:0)

您可以使用Javascript来执行此操作:

string script = "var evt = document.createEvent('MouseEvents');" +
                        "evt.initMouseEvent('mouseover',true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
                        "arguments[0].dispatchEvent(evt);";
((IJavaScriptExecutor)driver).ExecuteScript(script, element);