17

我使用了硒 2.31。

我已经使用 Actions 类进行鼠标移动。使用这个我将鼠标移到一个菜单上,它的子菜单只出现了几分之一秒,这与旧版本的 Firefox 不同。

由于这个问题,我无法选择子菜单,driver.findElement因为它会引发异常“元素无法滚动到视图中”。

有什么解决办法吗?

4

6 回答 6

32

使用操作对象,您应该首先移动菜单标题,然后移动到弹出菜单项并单击它。最后别忘了打电话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();
于 2013-03-11T22:04:15.280 回答
3

另一种解决方法是使用 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'");

请注意,只有当您有一个悬停元素在悬停时更改显示样式时,这才有可能。

于 2013-08-26T16:30:20.757 回答
3

试试这个代码......这是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();
于 2013-12-13T10:24:17.070 回答
1

如果您使用 Ruby,这将很有帮助。

1.首先你需要通过xpath或者id找到元素。

2.然后使用方法action.move_to().perform。

这是代码:

    hover = WAIT.until{$driver.find_element(:xpath,"xpath")}
    driver.action.move_to(hover).perform
于 2014-02-28T11:41:21.353 回答
0

这个答案帮助解决了我的问题。

我的挑战是在菜单选项下找到一个链接。在我将鼠标悬停在菜单上之前,该链接不可见。

对我来说,这个关键部分是发现除了悬停在菜单上之外,我接下来必须将鼠标悬停在链接上才能与之交互。

于 2013-06-12T03:50:22.177 回答
0
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;
    }                           
    }
于 2016-06-03T21:52:30.160 回答