Selenium の Firefox WebDriver 2.20 を使用して、Web ページのリンクの上にマウスを置いたときに表示されるツールチップを表示する必要があります。
これを行うために Selenium の Action クラスを使用しようとしましたが、ClassCastException: $Proxy7 incompatible with org.openqa.selenium.internal.Locatable が発生します。これが私がこれまでに試したことです:
Actions builder = new Actions(driver);
WebElement link = driver.findElement(By.tagName("a"));
builder.moveToElement(link).build().perform();
関数に渡した WebElement が Locatable オブジェクトにキャストされると、moveToElement() メソッドで ClassCastException が発生します。メソッドは次のとおりです。
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);