web-dev-qa-db-fra.com

Comment survoler la souris avec Selenium WebDriver dans Firefox 19?

J'ai utilisé Selenium 2.31.

J'ai utilisé la classe Actions pour le mouvement de la souris. En utilisant cela, j'ai déplacé la souris sur un menu et son sous-menu n'est apparu qu'une fraction de seconde contrairement à l'ancienne version de Firefox.

Beacuse de ce problème, je ne peux pas sélectionner le sous-menu en utilisant driver.findElement car il lève une exception "l'élément ne peut pas défiler dans la vue".

Existe-t-il une solution à ça?

16

Avec l'objet actions, vous devez d'abord déplacer le titre du menu, puis passer à l'élément de menu contextuel et cliquer dessus. N'oubliez pas d'appeler actions.perform() à la fin. Voici un exemple de code Java:

Actions actions = new Actions(driver);
WebElement menuHoverLink = driver.findElement(By.linkText("Menu heading"));
actions.moveToElement(menuHoverLink);

WebElement subLink = driver.findElement(By.cssSelector("#headerMenu .subLink"));
actions.moveToElement(subLink);
actions.click();
actions.perform();
32
SerkanC

Une autre façon de procéder consiste à utiliser l'exécuteur JavaScript de Selenium pour forcer le style de l'élément à afficher.

Un exemple de ceci serait dans ce sens en C #

//Use the Browser to change the display of the element to be shown
 (IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('myId').stlye.display="block");

//navigate to your link that is now viewable 
driver.FindElement(By.Xpath('//LinkPath')).Click(); 

De là, vous pouvez trouver le XPath de votre élément et utiliser le sélénium pour cliquer sur l'élément. Vous pouvez en cascade pour trouver également les enfants de votre élément principal

//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'");

Notez que cela n'est possible que si vous avez un élément de survol qui modifie le style d'affichage lors du survol.

3
Ben

Essayez ce code ... C'est du code pointu ...

//Webelement is the main menu Link
webElement = driver.FindElement(By.XPath("Your element xpath"));
Actions act = new Actions(driver);
        act.MoveToElement(webElement).Perform();//This opens menu list

        System.Threading.Thread.Sleep(5000);//This line will help you to hold menu 
 //This web element is the sub menu which is under main menu
        webElement = driver.FindElement(By.XPath("Sub menu path"));
        act.MoveToElement(webElement).Perform();//This opens menu list
        System.Threading.Thread.Sleep(5000);//Holds menu
    //This web element is the option you have to click
        webElement = driver.FindElement(By.XPath("Path"));
        webElement.Click();
2
Chandra Sekhar

Cela vous sera utile si vous utilisez Ruby.

1.Tout d'abord, vous devez trouver l'élément par xpath ou id.

Ensuite, utilisez la méthode action.move_to (). Perform.

Voici le code:

    hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
    driver.action.move_to(hover).perform
1
Rain

Cette réponse a aidé à résoudre mon problème.

Mon défi était de trouver un lien sous une option de menu. Le lien n'était pas visible jusqu'à ce que je survole le menu.

Cette partie cruciale pour moi a été de découvrir qu'en plus de survoler le menu, je devais ensuite survoler le lien pour interagir avec lui.

0
Uptightkid
List<WebElement> list = driver.findElements(By.xpath("//a"));
        for (int i=0;i<list.size();i++){
        if(list.get(i).getText().equalsIgnoreCase("cacique intimates M"))
            {
    new Actions(driver).moveToElement(list.get(i)).click().build().perform();
    System.out.println("Clicked on Parent Category");
    new Actions(driver).moveToElement(list.get(i)).moveToElement(driver.findElement(By.linkText("SPECIALTY BRAS"))).click().build().perform();
        break;
    }                           
    }
0
Sujay Kuna