Selenium webdriver - 鼠标悬停和下拉菜单 - 鼠标在浏览器内部/外部问题

时间:2014-02-05 21:28:17

标签: java selenium drop-down-menu selenium-webdriver mouseover

规格: Windows 7的; 硒2.39.0; Java - Eclipse


我目前正在使用Selenium通过三种不同的浏览器(Chrome,IE9和Firefox)测试webApp。 webApp有一个菜单栏,并且有下拉菜单(经典)。 我需要将鼠标设置在该菜单栏的一个项目上并等待下拉菜单出现,然后我需要单击其中一个下拉菜单项。

我的代码:

        WebElement div_menu = driver.findElement(By.xpath("//div[text() = 'Trigger of the dropdown menu']"));

        WebDriverWait wait = new WebDriverWait(driver, 300);
        Actions builder = new Actions(driver);    
        builder.moveToElement(div_menu).build().perform();

        WebElement item_to_click = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Link_inside_the_dropdown_menu")));

        item_to_click.click();

当我开始测试时会发生有趣的事情。 (FYI浏览器逐个出现,也就是说,所有测试都是针对一个浏览器执行的,然后继续使用其他浏览器,而不是线程化。)

如果鼠标指针在执行测试时位于浏览器上(因为它们未完全最大化),则结果如下:

  • Chrome :div_menu似乎得到鼠标悬停(因为css样式更改),但是太短,所以下拉菜单永远不会出现
  • IE9 :抛出此异常: org.openqa.selenium.ElementNotVisibleException:无法单击元素,但主要是div_menu获取鼠标悬停,因此会显示下拉菜单。尽管如此,item_to_click它根本没有被点击(顺便说一句,我不认为异常是问题原因)。此外,它就像一只看不见的鼠标一直放在div_menu上,因为当我移动真正的鼠标时,下拉菜单会闪烁,好像div_menu会在每次停止移动真正的鼠标时丢失悬停并将其取回。
  • Firefox :按预期工作。

现在,让我们看看当我将鼠标移出浏览器窗口时会发生什么。

  • Chrome :正常工作
  • IE9 :正常工作
  • Firefox :div_menu似乎得到鼠标悬停(因为css样式更改),但是太短,所以下拉菜单永远不会出现

如您所见,三种浏览器的代码相同。这里有趣的变量是mouse_in_browser和mouse_out_browser。 我无法想象问题会是什么。 如果您需要任何额外信息,请不要犹豫。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

我设法让Firefox无论物理鼠标在哪里都能正常工作。 我用这种方式初始化它:

            //Firefox initialization
              FirefoxProfile profile = new FirefoxProfile();
            //explicitly enable native events(this is mandatory on Linux system, since they
            //are not enabled by default
              profile.setEnableNativeEvents(true);
              WebDriver driver = new FirefoxDriver(profile);

对于我来说,这对我有用。还不是其他两个。

来源:Selenium WebDriver mouse actions moveToElement doesn't raise mouseout event on Firefox Linux