Jim and I have exchanged a couple of private E-mails about my issue, but I wanted to bring it back to the community here.
I believe that issue 2067 is talking about what is described in the Wiki for the mouseOver issue with IE:
http://code.google.com/p/selenium/wiki/InternetExplorerDriver#Hovering_Over_ElementsAs I told Jim, I have verified that this broke in 2.15.0, with 2.14.0 being the last one where this functionality worked. I would guess that somewhere between 70-90% of all web sites out there need to have this working. Based on our tracking info for our web site I know that at least 75% of our customers are using one version of IE or the other (we finally got the last one off IE 6 this month).
It is flat out impossible to navigate our web site without being able to hover over a menu element on the page. So not having a solution to this is a non-starter for us that basically makes Selenium useless.
According to Jim, there is a possible solution, but it would violate the rule of allowing you to use your desktop while a test is running. Here is what Jim wrote to me:
Regarding IE and mouseover events, I'm frankly confused at how it worked
in the first place. Ever since the IE driver implemented the
interactions API to support mouse event (and even before, actually),
it's been plagued by this particular problem. I suppose it's possible
that the Java language bindings moved to using the actual IE driver for
WebDriverBackedSelenium's mouse events in 2.15, and that may be why you
started seeing the problem there. I honestly don't know; I'm not an
expert in the Java bindings and in the history of what exactly landed
when with them. Believe me, I'd love to find a solution to the problem,
more than you know. If you can ensure that the mouse pointer is outside
the bounds of the IE window, that should mitigate the problem.
The technical reason for the problem is that we simulate mouse
events by sending Windows messages to the IE window. However, somewhere
in IE's event loop, when it receives a mouse event, it calls the Win32
WindowFromPoint() API, which sends a WM_NCHITTEST message to itself to
determine where within the window the cursor is. Its drawing layer then
repositions elements on the canvas based on the physical mouse pointer.
I've tried hooking the WM_NCHITTEST message, but it doesn't seem to do
any good. Other alternatives are that we could begin using the
SendInput() API, but that would require the IE window to have focus,
which it doesn't at the moment. We could manipulate the cursor itself,
but that violates the project's "let the user be able to do other things
with their machine while a test is running" principle. I'd be
interested in your suggestions as to how to solve this particular problem.
Please note, however, that suggesting to simply use JavaScript to
simulate the events is something of a non-starter, as native events are
generally thought by the project architects to be superior, and with a
few notable exceptions (including this scenario), they demonstrably are.
However, I'd be willing to implement a "simulated events mode" for the
IE driver, but someone else would have to write the JavaScript and
integrate it into the existing JavaScript framework of the WebDriver
project. I simply don't have the bandwidth to take on that level of
effort right now. Now that I think about it, though, I believe the Mouse
and Keyboard implementations for the Java bindings are pluggable, so
you might be able to create a Mouse implementation at runtime that uses
JavaScript rather than native events, so that might be a way to approach
it too.
I understand the desire to not violate that rule, and I agree with it as I use that capability doing development myself, however if it comes to a broken WebDriver implementation and not being able to do other things on the same system while a test is running - I choose to fix the WebDriver implementation. I suggested that the behavior could be modified by having a capability that you can set to affect how it does this.
Since my tests run unattended I don't have the option of controlling where the mouse pointer is located, as he suggested in his first paragraph above. Right now, in order to support both IE and current Firefox versions I will be forced to run IE on 2.14.0 (which has the issue with IE 9 I outlined in 3680, which is now closed as will not fix) and all other tests on 2.21.0 and higher.
I am hoping we can have a discussion here as to how this can be fixed in the upcoming releases of Selenium.
Thanks.
Mike