当浏览器最小化时,mouseOver()函数不起作用

时间:2014-05-23 13:25:44

标签: php selenium behat mink

我需要将鼠标悬停在某个元素上,然后点击悬停在div元素上的叠加层上的链接。我使用mouseOver()函数,当浏览器在视图区域时它工作正常。但是,如果我最小化浏览器,则鼠标悬停不起作用并发出以下错误。

"元素当前不可见,因此可能无法与之交互(警告:服务器未提供任何堆栈跟踪信息)"。有人可以帮我吗,拜托?

我是用户behat \ mink \ selenium2driver

1 个答案:

答案 0 :(得分:0)

Selenium需要关注浏览器窗口才能可靠地控制它。 如果您与浏览器进行交互,则会导致闪烁测试。

所以你得到的信息: “元素目前不可见,因此可能无法与之互动” 实际上是问题:Selenium没有看到该元素,因为浏览器窗口没有显示。

您可以采取哪些措施来解决此类问题,即可在失败时捕获屏幕截图。 将以下内容添加到FeatureContext.php文件中:

public function writeDebugInfoAfterFailedStep($event)
{
  if (4 === $event->getResult()) { // if step failled
    $driver = $this->getSession()->getDriver();
    $outputFile = 'behat_' . date("Y-m-d H:i:s");

    if (($driver instanceof Selenium2Driver)) {
        $outputFileImg = $outputFile . '.png';
        $this->saveScreenshot($outputFileImg, "screenshots/");
    }
    $content = $this->getSession()->getPage()->getContent();
    $outputFile = $outputFile . '.html';
    file_put_contents("screenshots/" . $outputFile, $content);
    return;
  }
}

然后,您应该在“screenshots”目录中获取屏幕截图(首先需要创建该目录)。

发生此问题的另一种情况是选择器匹配多个元素并尝试与错误的元素交互,一个不可见的元素。 如果页面的CSS无效且几个元素具有相同的id,则会发生这种情况。 解决方案:改进您的选择器以确保获得正确的元素。

如果这没有帮助,以下是确定Selenium webdriver是否看到元素的条件: https://dvcs.w3.org/hg/webdriver/raw-file/tip/webdriver-spec.html#determining-if-an-element-is-displayed (不仅要检查元素的可见性,还要检查其父元素的可见性。)