Как сделать курсор мыши, используя Selenium WebDriver в Firefox 19?
Я использовал селен 2.31.
Я использовал класс Actions для перемещения мыши. Используя это, я переместил мышь над меню, и его подменю появилось только на долю секунды, в отличие от старой версии firefox.
Избегайте этой проблемы. Я не могу выбрать подменю, используя driver.findElement
, поскольку он выбрасывает исключение. Элемент не может быть прокручен в представление.
Есть ли какое-либо решение для этого?
Ответы
Ответ 1
С объектом action сначала нужно переместить заголовок меню, а затем перейдите к пункту всплывающего меню и щелкните по нему. Не забудьте вызвать 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();
Ответ 2
Другой способ сделать это - использовать Selenium JavaScript Executor, чтобы заставить стиль отображаемого элемента.
Пример этого будет по этим строкам в С#
//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 для своего элемента и использовать селен, чтобы щелкнуть элемент. Вы можете каскадировать это, чтобы найти детей вашего основного элемента, а также
//(IJavaScriptExecutor)ffbrowser).ExecuteScript("document.getElementById('myId').children[1].children[1].style.display='block'");
Обратите внимание, что это возможно только в том случае, если у вас есть элемент hover, который изменяет стиль отображения при зависании.
Ответ 3
Попробуйте этот код...
Это четкий код...
//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();
Ответ 4
Это будет полезно, если вы используете Ruby.
1. Сначала вам нужно найти элемент по xpath или id.
2. Затем используйте метод action.move_to(). выполните.
Вот код:
hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
driver.action.move_to(hover).perform
Ответ 5
Этот ответ помог решить мою проблему.
Мой вызов заключался в том, чтобы найти ссылку в меню.
Ссылка не была видна, пока я не завис над меню.
Эта важная часть для меня заключалась в том, что в дополнение к зависанию над меню я должен был навести курсор на ссылку, чтобы взаимодействовать с ней.
Ответ 6
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;
}
}