¿Hay una solución probada de mouseover para FirefoxDriver en Selenium2?

Estoy usando Selenium Java 2.0b3 . Tengo este código:

... WebDriver driver = new InternetExplorerDriver(); Selenium seleniumDriver = new WebDriverBackedSelenium(driver, "http://localhost:8088/Sistema/"); ... ... RenderedWebElement menuRegistrar = (RenderedWebElement)driver.findElement(By.xpath("//a[normalize-space()='Registrar']")); seleniumDriver.mouseOver("//a[normalize-space()='Registrar']"); //makes element visible menuRegistrar.click(); seleniumDriver.mouseOut("//a[normalize-space()='Registrar']"); ... 

Funciona como un encanto con InternetExplorerDriver (con IE 8 ), pero no funciona con FirefoxDriver (con Firefox 4 ). He intentado muchas cosas con el código y nada funciona. Y debo usar FirefoxDriver porque la aplicación que estoy probando no se comporta bien con IE.

Como se puede adivinar, el enlace “Registrar” está oculto hasta que se desencadena el evento mouseOver.

¿Alguna solución provisional probada? Gracias por tu tiempo…

EDITAR : también probé ChromeDriver con Chrome 11. Tampoco funcionó. Si hay una solución que funciona con Chrome, ¡la tomaré!


RESPUESTA (CÓDIGO DE TRABAJO con Selenium Java 2.0RC1, Windows 7, Firefox 4) : Gracias a Andy Tinkham y Luke Inman-Semerau:

 //get the element that shows menu with the mouseOver event WebElement menu = driver.findElement(By.xpath("//div[@id='nav']/li[3]")); //the element that I want to click (hidden) WebElement menuOption = driver.findElement(By.xpath("//a[normalize-space()='Registrar']")); //build and perform the mouseOver with Advanced User Interactions API Actions builder = new Actions(driver); builder.moveToElement(menu).build().perform(); //then click when menu option is visible menuOption.click(); 

NOTA: la API de Interacción de usuario avanzada usa NativeEvents en los navegadores (que no es compatible con plataforma cruzada). Entonces, este código podría no funcionar así si cambias el sistema operativo. Es por eso que agregué el sistema operativo y los detalles del navegador. Ver pregunta en el grupo de usuarios de selenium

Sugiero probar la API de acciones avanzadas de usuario que se agregó ayer en la versión 2.0rc1, ya que parece que todavía usas la API Selenium 1 (pasando por WebDriverBackedSelenium), y no estoy seguro de cuánto Firefox 4 admite proporciona. No estoy usando Java para mis exámenes de Selenium, pero me parece que lo que quieres hacer es algo como esto:

  Actions builder = new Actions(driver); // Or maybe seleniumDriver? Not sure which one to use Actions hoverOverRegistrar = builder.moveToElement(menuRegistrar); hoverOverRegistrar.perform(); 

Uso este código para obtener un evento mouseover para un webelement específico. No necesita eventos nativos.

 protected void mouseOver(WebElement element) { String code = "var fireOnThis = arguments[0];" + "var evObj = document.createEvent('MouseEvents');" + "evObj.initEvent( 'mouseover', true, true );" + "fireOnThis.dispatchEvent(evObj);"; ((JavascriptExecutor) driver).executeScript(code, element); } 
 Actions action = new Actions(driver); action.moveToElement(element).build().perform(); action.moveByOffset(1, 1).build().perform();