Esiste una soluzione per il mouseover dimostrata per FirefoxDriver in Selenium2?

Sto usando Selenium Java 2.0b3 . Ho questo codice:

... 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']"); ... 

Funziona come un fascino con InternetExplorerDriver (con IE 8 ), ma non con FirefoxDriver (con Firefox 4 ). Ho provato un sacco di cose con il codice e niente funziona. E devo usare FirefoxDriver perché l’applicazione che sto testando non si comporta bene con IE.

Come puoi immaginare, il collegamento “Registrar” è nascosto finché non si triggers l’evento mouseOver.

Qualche soluzione provata? Grazie per il tuo tempo…

EDIT : anche provato ChromeDriver con Chrome 11. Non ha funzionato neanche. Se c’è un rimedio che funziona con Chrome, lo prendo io!


RISPOSTA (CODICE DI LAVORO con Selenium Java 2.0 RC1, Windows 7, Firefox 4) : grazie a Andy Tinkham e 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: l’API Advanced User Interaction utilizza NativeEvents sui browser (che non è supportato su più piattaforms). Quindi questo codice potrebbe non funzionare proprio così se cambi il sistema operativo. Ecco perché ho aggiunto il SO e il dettaglio del browser. Vedi la domanda nel gruppo di utenti di selenium

Suggerirei di provare l’ API Advanced User Actions che è stata aggiunta nella release 2.0rc1 ieri, poiché sembra che tu stia usando ancora l’API Selenium 1 (passando per WebDriverBackedSelenium), e non sono sicuro di quanto Firefox 4 supporti tale fornisce. Non sto usando Java per i miei test di selenium, ma mi sembra che quello che vorresti fare sia qualcosa del genere:

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

Io uso questo codice per ottenere un evento mouseover per un webelement specifico. Non ha bisogno di eventi nativi.

 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();