无法在selenium中截取mouseover的屏幕截图

时间:2015-04-01 11:38:26

标签: selenium-webdriver screenshot

我正在尝试使用TakesScreenshot拍摄子菜单的截图,该截图发生在使用contactUs.hoverHM(); screenshot = ((TakesScreenshot) PageFactoryBase.getSharedWebDriver()).getScreenshotAs(OutputType.BYTES); scenario.embed(screenshot, "image/png"); 在硒中悬停时。但这不起作用。屏幕截图已被拍摄,但图像中不存在子菜单。 我也曾尝试在悬停后使用隐式等待,但没有任何效果。 请建议一种方法来捕获子菜单的屏幕截图。

{{1}}

4 个答案:

答案 0 :(得分:1)

这对我有用。我很确定它会对你有用。

            _driver = new FirefoxDriver();
            _driver.Navigate().GoToUrl("http://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseover_mouseout");
            _driver.SwitchTo().Frame(_driver.FindElement(By.Id("iframeResult")));
            Actions builder = new Actions(_driver);
            builder.MoveToElement(_driver.FindElement(By.TagName("p"))).Build().Perform();
            var screenshot = ((ITakesScreenshot)_driver).GetScreenshot();
            var filename = new StringBuilder("D:\\");
            filename.Append(DateTime.Now.ToString("HH_mm_ss dd-MM-yyyy" + " "));
            filename.Append("test");
            filename.Append(".png");
            screenshot.SaveAsFile(filename.ToString(), System.Drawing.Imaging.ImageFormat.Png);

将鼠标悬停在文本上后,它变为黄色,下面是我拍摄的屏幕截图。 Screen shot that I took

答案 1 :(得分:0)

以下是另一种可以使用' 打印屏幕'键入您的测试代码并从系统中的剪贴板获取图像。  所做的是使用KeyEvent' PRTSC '将Image放入系统剪贴板,然后让系统剪贴板将其写入文件。我希望它也会复制鼠标悬停。

Robot rob = new Robot();

rob.keyPress(KeyEvent.VK_PRINTSCREEN);

Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();

Transferable content = clip.getContents(null);

BufferedImage img = (BufferedImage)content.getTransferData(DataFlavor.imageFlavor);

ImageIO.write(img, "png", new File("D:\\test.png"));

答案 2 :(得分:0)

我尝试了相同的方案但是clickAndHold用于悬停皮肤。它在Actions的帮助下对我有用,如下所示:

WebElement elm = driver.findElement(By.id("btn1"));
Actions builder = new Actions(driver);
Action act = builder.clickAndHold(elm).build();
act.perform();
try {
     File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
     FileUtils.copyFile(scrFile, new File("c:\\Img\\screenshot.png"));
} catch (IOException e) {
e.printStackTrace();
}
act = builder.release(elm).build();
act.perform();

您可以将clickAndHold替换为moveToElement鼠标悬停元素。截取屏幕截图然后释放元素或远离它。

答案 3 :(得分:0)

感谢大家回答这个帖子。 我可以按照Vivek的建议使用机器人截取屏幕截图。

builder.moveToElement(getSharedWebDriver()。findElement(By.xpath(" // div [@class ='品牌栏目'] / ul / li [@class ='有效的hasflyout']")))。perform(); 机器人机器人=新机器人();

要点;

point = getSharedWebDriver()。findElement(By.xpath(" // div [@class ='品牌栏目'] / ul / li [@class ='有效的hasflyout& #39;]"。))的getLocation();         int x = point.getX();         int y = point.getY();            robot.mouseMove(X,Y);

在理想情况下,应使用perform()或mouseMove()。但不知何故,在我的情况下,我不得不使用这两个函数。