3

使用 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 被强制转换为可定位对象时。方法是:

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);
4

1 回答 1

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);
于 2013-03-15T09:16:39.880 回答