我用过硒2.31。
我使用Actions类来移动鼠标。我用它将鼠标移到一个菜单上,它的子菜单只出现了几分之一秒,不像旧版本的Firefox。
由于此问题,我无法使用drive. findElement
选择子菜单,因为它会引发异常“元素无法滚动到视图中”。
有什么解决方案吗?
对于actions对象,您应该首先移动菜单标题,然后移动到弹出菜单项并单击它。不要忘记在最后调用< code>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();
另一种方法是使用Selenium的JavaScript执行器来强制显示元素的样式。
这方面的一个例子是沿着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'");
请注意,只有当悬停在一个悬停元素上时,该元素才会改变显示样式。
试试这个代码…这是c清晰的代码…
//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();