web-dev-qa-db-fra.com

Comment exécuter la fonction mouseover dans Selenium WebDriver en utilisant Java?

Je veux faire passer la souris sur un menu déroulant. Lorsque nous survolons le menu, les nouvelles options s’affichent. J'ai essayé de cliquer sur les nouvelles options en utilisant le xpath. Mais vous ne pouvez pas cliquer directement sur les menus. Donc, de manière manuelle, j'essaie de survoler le menu déroulant, puis de cliquer sur les nouvelles options.

Actions action = new Actions(webdriver);
WebElement we = webdriver.findElement(By.xpath("//html/body/div[13]/ul/li[4]/a"));
action.moveToElement(we).build().perform();
117
pradeep_tester

Il n'est pas vraiment possible d'effectuer une action de survol de la souris. Vous devez plutôt enchaîner toutes les actions que vous souhaitez réaliser en une seule fois. Alors déplacez-vous vers l'élément qui révèle les autres, puis au cours de la même chaîne, déplacez-vous vers l'élément maintenant révélé et cliquez dessus.

Lorsque vous utilisez des chaînes d'action, vous devez vous rappeler de le "faire comme un utilisateur".

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();
101
Mark Rowlands

Aucune de ces réponses ne fonctionne lorsque vous essayez les choses suivantes:

  1. Survolez un élément de menu.
  2. Trouvez l'élément caché UNIQUEMENT disponible après le survol.
  3. Cliquez sur l'élément de sous-menu.

Si vous insérez une commande 'effectuer' après le moveToElement, il se déplace vers l'élément et l'élément de sous-menu s'affiche pendant une brève période, mais il ne s'agit pas d'un survol. L'élément masqué disparaît immédiatement avant qu'il puisse être trouvé, ce qui entraîne une exception ElementNotFoundException. J'ai essayé deux choses:

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

Cela n'a pas fonctionné pour moi. Ce qui suit a fonctionné pour moi:

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

En utilisant les actions à survoler et le clic WebDriver standard, je pouvais survoler puis cliquer.

51
zmorris

Basé sur this blog, j'ai été en mesure de déclencher le survol à l'aide du code suivant avec Selenium 2 Webdriver:

String javaScript = "var evObj = document.createEvent('MouseEvents');" +
                    "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
                    "arguments[0].dispatchEvent(evObj);";


((JavascriptExecutor)driver).executeScript(javaScript, webElement);
24
Zugwalt

Ce code fonctionne parfaitement bien:

 Actions builder = new Actions(driver);
 WebElement element = driver.findElement(By.linkText("Put your text here"));
 builder.moveToElement(element).build().perform();

Après le survol de la souris, vous pouvez ensuite effectuer la prochaine action souhaitée sur les informations révélées.

10
user7123229

Vérifiez cet exemple comment nous pourrions implémenter ceci.

enter image description here

public class HoverableDropdownTest {

    private WebDriver driver;
    private Actions action;

    Consumer < By > hover = (By by) - > {
        action.moveToElement(driver.findElement(by))
              .perform();
    };

    @Test
    public void hoverTest() {
        driver.get("https://www.bootply.com/render/6FC76YQ4Nh");

        hover.accept(By.linkText("Dropdown"));
        hover.accept(By.linkText("Dropdown Link 5"));
        hover.accept(By.linkText("Dropdown Submenu Link 5.4"));
        hover.accept(By.linkText("Dropdown Submenu Link 5.4.1"));
    }

    @BeforeTest
    public void setupDriver() {
        driver = new FirefoxDriver();
        action = new Actions(driver);
    }

    @AfterTest
    public void teardownDriver() {
        driver.quit();
    }

}

Pour une réponse détaillée, vérifiez ici - http://www.testautomationguru.com/Selenium-webdriver-automating-hoverable-multilevel-dropdowns/

6
vins

J'ai trouvé cette question à la recherche d'un moyen de faire la même chose pour mes tests Javascript, en utilisant Protractor (une interface javascript pour Selenium.)

Ma solution avec le rapporteur 1.2.0 et webdriver 2.1:

browser.actions()
.mouseMove(
  element(by.css('.material-dialog-container'))
)
.click()
.perform();

Cela accepte également un décalage (je l’utilise pour cliquer au-dessus et à gauche d’un élément :)

browser.actions()
.mouseMove(
  element(by.css('.material-dialog-container'))
  , -20, -20  // pixel offset from top left
)
.click()
.perform();
5
Plato

Exemple de programme en survol de la souris avec Selenium Java WebDriver:

public class Mhover {
    public static void main(String[] args){
       WebDriver driver = new FirefoxDriver();
       driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
       driver.get("http://www.google.com");
       WebElement ele = driver.findElement(By.id("gbqfba"));
       Actions action = new Actions(driver);
       action.moveToElement(ele).build().perform();
    }
}
4
Helping Hands

Tu peux essayer:

WebElement getmenu= driver.findElement(By.xpath("//*[@id='ui-id-2']/span[2]")); //xpath the parent

Actions act = new Actions(driver);
act.moveToElement(getmenu).perform();

Thread.sleep(3000);
WebElement clickElement= driver.findElement(By.linkText("Sofa L"));//xpath the child
act.moveToElement(clickElement).click().perform();

Si vous aviez le cas le web ont plusieurs catégorie, utilisez la première méthode. Pour le menu que vous vouliez, vous avez juste besoin de la deuxième méthode.

2
Prasetyo Budi