¿Cómo realizar la función de pasar el mouse en Selenium WebDriver usando Java?

Resuelto Pradeep SJ asked hace 11 años • 10 respuestas

Quiero hacer la función de pasar el mouse sobre un menú desplegable. Cuando pasemos el cursor sobre el menú, se mostrarán las nuevas opciones. Intenté hacer clic en las nuevas opciones usando xpath. Pero no puedo hacer clic en los menús directamente. Entonces, de forma manual, intento pasar el cursor sobre el menú desplegable y luego hago clic en las nuevas opciones.

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
Pradeep SJ avatar Jun 25 '13 16:06 Pradeep SJ
Aceptado

Realmente no es posible realizar una acción de "desplazar el mouse", sino que necesita encadenar todas las acciones que desea lograr de una sola vez. Así que muévete al elemento que revela los demás, luego, durante la misma cadena, muévete al elemento ahora revelado y haz clic en él.

Al utilizar cadenas de acción, debes recordar "hacerlo como lo haría un usuario".

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).moveToElement(webdriver.findElement(By.xpath("/expression-here"))).click().build().perform();
Mark Rowlands avatar Jun 25 '2013 10:06 Mark Rowlands

Ninguna de estas respuestas funciona cuando se intenta hacer lo siguiente:

  1. Pase el cursor sobre un elemento del menú.
  2. Encuentre el elemento oculto que SOLO está disponible después de pasar el cursor.
  3. Haga clic en el elemento del submenú.

Si inserta un comando 'realizar' después de moveToElement, se mueve al elemento y el elemento del submenú se muestra durante un breve período, pero eso no es un desplazamiento. El elemento oculto desaparece inmediatamente antes de poder encontrarlo, lo que genera una excepción ElementNotFoundException. Intenté dos cosas:

Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
builder.moveToElement(clickElement).click().perform();

Esto no funcionó para mí. Lo siguiente funcionó para mí:

Actions builder = new Actions(driver);
builder.moveToElement(hoverElement).perform();
By locator = By.id("clickElementID");
driver.click(locator);

Usando las Acciones para desplazarme y el clic estándar de WebDriver, podía desplazarme y luego hacer clic.

zmorris avatar Jul 28 '2014 19:07 zmorris