2013-10-29 16 views
5

私はHTML divタグを持っています。そして、divの中には、マウスがその境界に入るときに現れる要素があります。ここで、マウスの入力時またはホバリング時に表示される要素をクリックします。IEのセレンのホバリング要素

問題:要素が点滅し始めます。 ブラウザ:IE8

私は

IWebElement we = addToBasket.FindElement(By.Id("MyBox")); 
    action.MoveToElement(we).MoveToElement(driver.FindElement(By.Id("plus-icon"))).Click().Build().Perform(); 

その点滅がなぜ任意の提案以下のコードを使用していますか?

+0

使用しているセレンのバージョンを教えてください。 – Karthikeyan

+0

IE11は依然としてこの問題を抱えています。幸運にも、以下の解決策もまだ機能しています。 –

答えて

17

「永続的なホバー」と呼ばれるIEドライバーの機能のために、エレメントが点滅しています。この機能は疑わしい値ですが、SendMessage APIを使用した場合、脳のような方法のIE(ブラウザではなく、ドライバ)responds to WM_MOUSEMOVE messagesのために必要です。

あなたはいくつかの選択肢があります。あなたは、次のようなコードを使用することにより、オフ永続的なホバーを回すことができます。これはあなたがホバーしようとすると、物理的にマウスカーソルが画面に表示されているところの気まぐれの対象にできますようものの

InternetExplorerOptions options = new InternetExplorerOptions(); 
options.EnablePersistentHover = false; 
IWebDriver driver = new InternetExplorerDriver(options); 

は、注意してください。それが受け入れられない場合は、couple of other approachesがあります。まず、いわゆる「ネイティブイベント」をオフにすると、ドライバーは合成されたJavaScriptイベントのみに依存します。このアプローチには、マウスイベントを合成するためにJavaScriptのみに依存するため、独自の落とし穴があります。

InternetExplorerOptions options = new InternetExplorerOptions(); 
options.EnableNativeEvents = false; 
IWebDriver driver = new InternetExplorerDriver(options); 

最後に、あなたはより正確なSendInput APIを使用するコードにデフォルトSendMessageのWindows APIを使用してからの移行ができます。これはRequireWindowFocusプロパティで行われます。その欠点は、マウス入力がシステム内の非常に低いレベルで注入されることであり、これはIEウィンドウがシステム上のフォアグラウンドウィンドウであることを必要とする。

InternetExplorerOptions options = new InternetExplorerOptions(); 
options.RequireWindowFocus = true; 
IWebDriver driver = new InternetExplorerDriver(options); 

最後に、これらのプロパティをすべて一度に設定しないでください。アプローチを選んでそれに固執する。それらのうちのいくつかは相互排他的であり、それらの間の相互作用は未定義である。

+0

Jimに感謝します。上記のオプションを使用して、点滅が停止しました。あなたが言ったように物理的にマウスを動かしなければなりませんでした。私は私の場合に適した解決策を見つけました。 http://code.google.com/p/selenium/wiki/InternetExplorerDriverここではテストを実行している間、マウスのコースをブラウザの境界内に保ちます。その点滅が止まり、要素をクリックすることができました。 – Aman

+0

これを適切な答えとして記入してください。 – JimEvans

+0

Selenium 2.47.1以降、APIが変更されました。これはieCapabilities.setCapability(InternetExplorerDriver.NATIVE_EVENTS、false);です。 –

0

これは私のために働いた。

WebElement element = driver.findElement(By.xpath("element xpath")); 
Locatable hoverItem = (Locatable) element; 
Mouse mouse = ((HasInputDevice) driver).getMouse(); 
mouse.mouseMove(hoverItem.getCoordinates()); 
関連する問題