example chrome bindings java webdriver selenium-webdriver

java - chrome - selenium webdriver example



¿Existe una solución probada de mouseOver para FirefoxDriver en Selenium2? (3)

Sugeriría probar la API avanzada de acciones de usuario que se agregó ayer en la versión 2.0rc1, ya que parece que todavía se está usando la API de Selenium 1 (pasando por WebDriverBackedSelenium), y no estoy seguro de cuánto soporta Firefox 4 proporciona. No estoy usando Java para mis pruebas de Selenium, pero me parece que lo que querrías 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();

Estoy usando Selenium Java 2.0b3 . Tengo este codigo

... 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 con el 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 puede imaginar, el enlace "Registrar" está oculto hasta que se dispare el evento mouseOver.

¿Alguna solución 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 utiliza NativeEvents en los navegadores (que no es compatible con varias plataformas). Por lo tanto, este código podría no funcionar así si cambia el sistema operativo. Es por eso que agregué el sistema operativo y los detalles del navegador. Ver pregunta en el grupo de usuarios de selenio.


Utilizo este código para obtener un evento de mouseover para un elemento web 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();