3

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);
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 に答える