Как сделать наведение мыши с помощью Selenium WebDriver в Firefox 19?

я использовал селен 2.31.

я использовал класс действий для перемещения мыши. Используя это, я переместил мышь над меню, и его подменю появилось только на долю секунды, в отличие от более старой версии firefox .

из-за этой проблемы я не могу выбрать подменю с помощью driver.findElement поскольку он создает исключение "элемент не может быть прокручен в поле зрения".

есть ли решение для этого?

6 ответов


С помощью объекта "действия" сначала переместите заголовок меню, а затем перейдите во всплывающее меню и щелкните его. Не забудьте позвонить actions.perform() в конце. Вот пример кода 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();

другой способ сделать это-использовать JavaScript-исполнитель Selenium для принудительного отображения стиля элемента.

пример этого был бы вдоль этих строк в 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(); 

оттуда вы можете найти XPath для своего элемента и использовать selenium, чтобы нажать на элемент. Вы можете каскадировать это, чтобы найти детей вашего основного элемента, а также

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

обратите внимание, что это возможно только при наличии элемента наведения, который изменяет стиль отображения при наведении.


попробуйте этот код... Это диез код...

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

Это будет полезно, если вы используете Ruby.

1.Сначала вам нужно найти элемент по xpath или id.

2.Затем используйте действие метода.move_to().выполнять.

вот код:

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

этот ответ помог решить мою проблему.

моей задачей было найти ссылку под опцией меню. Ссылка не была видна, пока я не завис над меню.

эта важная часть для меня заключалась в том, чтобы узнать, что в дополнение к зависанию над меню мне нужно было навести курсор на ссылку, чтобы взаимодействовать с ней.


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;
    }                           
    }