Mac OSX上的Firefox驱动程序/ Selenium Webdriver的鼠标悬停事件不起作用

时间:2012-12-24 19:49:50

标签: firefox selenium webdriver

在各处搜索之后,我似乎找不到让鼠标悬停事件在Mac OSX上使用Firefox 16.0.2和Selenium 2.28的解决方案(我认为这应该是Mac OSX特有的问题,但是此代码应该可以使用一台Windows机器)。我有以下几个悬停在objectOnScreen上的内容,它应该显示一些ElseOnScreen:

//set enable native events is suggested by another post to make these native events work
FirefoxProfile prof = new FirefoxProfile(); 
prof.setEnableNativeEvents(true); 
WebDriver driver = new FirefoxDriver(prof);

// Hover over objectOnScreen which should reveal somethingElseOnScreen
Action builder;
Actions hover = new Actions(driver);
WebElement objectOnScreen = driver.findElement(By.xpath("//..."))
hover.moveToElement(objectOnScreen);
builder = hover.build();
builder.perform();

// Click something new that should appear on screen
By somethingElseOnScreen = By.xpath("//...");
WebDriverWait wait = new WebDriverWait(driver, 5L);
wait.until(ExpectedConditions.visibilityOfElementLocated(somethingElseOnScreen));
driver.findElement(somethingElseOnScreen).click();

此代码适用于Chrome,但不适用于Firefox。在Firefox中,someElseOnScreen永远不会出现(我得到了wait.until ...行的NoSuchElementException),当我看到浏览器时,我从未看到悬停工作。

我也试过这两件事,但都没有解决问题:

  • 使用悬停和点击操作构建构建器操作
  • 使用EventFiringMouse并将鼠标悬停在屏幕上的那一点上,但这也不适用于Firefox(但在Chrome上运行正常)。

是否有人针对此问题采取了解决方法?

谢谢。

1 个答案:

答案 0 :(得分:1)

我的解决方法是手动将元素的css display属性更改为inline(或block - 取决于您的HTML代码),该属性是隐藏的并且应显示在“鼠标悬停”上(或者调用JavaScript,在同一个偶数上添加所需的元素 - 取决于你的HTML代码)。

如果你能告诉我3件事,我可以告诉你具体的代码:

  1. 您用于Selenium的语言
  2. mouseover
  3. 之前元素的HTML / css属性
  4. mouseover
  5. 之后元素的HTML / css属性