Как сделать наведение мыши с помощью 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;
}
}