Selenium 2.35 を使用していて、Firefox で要素をクリックしようとすると、次のような予期しないエラーが発生します。
new Actions(driver).moveToElement(element).click().perform();
私が見つけた要素は、クリック イベントが関連付けられた < span > 要素です。私が遭遇している問題は、Firefox が要素をクリックしようとして失敗し、まったく別の要素をクリックする場合です。デバッガーを使用してコードを見ていくと、FirefoxDriver がブラウザーの間違った場所をクリックしているだけで、タイミングの問題に関係していると思われる問題は発生しません。ページに動的にロードされた < div > があり、クリックしたい要素を見つけて .click() コマンドを送信する直前にシフトダウンします。これが私の問題の原因だと思います。Thread.sleep(500) を配置して、動的 div のアニメーション化と挿入を完了するのに十分な時間を確保できますが、それは私にはだらしないようです。
また、 element.click() だけを送信しようとしましたが、それはより頻繁に失敗するようです。
更新 (2013 年 9 月 5 日):
@MrTi のコメントの助けを借りて私がたどり着いた解決策は次のとおりです。
private void jsClickOnElementById(String id)
{
WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(By.id(id)));
JavascriptExecutor js = (JavascriptExecutor)driver;
StringBuilder sb = new StringBuilder();
sb.append("var x = $('#" + id + "');");
sb.append("x.click();");
js.executeScript(sb.toString());
}
要素が実際にページ上にあることを確認するために、最初の「待機」呼び出しを追加し、JavascriptExecutor を使用して jquery を実行し、ページ上の要素をクリックしました。これは私の場合にはうまくいくようです。私はJavascriptExecutorクラスにかなり慣れていないので、誰かがこのソリューションのいくつかの欠点について助けてくれれば大歓迎です。