无法在硒中截取鼠标悬停的屏幕截图

unable to take screenshot of mouseover in selenium

我正在尝试使用 TakesScreenshot 截取在 selenium 中悬停时发生的子菜单。但这是行不通的。已截取屏幕截图,但图像中不存在子菜单。 我也尝试过在悬停后使用隐式等待,但没有任何效果。 请建议一种截取子菜单屏幕截图的方法。

contactUs.hoverHM();
screenshot = ((TakesScreenshot) PageFactoryBase.getSharedWebDriver()).getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");

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

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"));

我尝试过相同的场景,但 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 鼠标悬停在元素上。截取屏幕截图然后释放元素或离开它。

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

            _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);

将鼠标悬停在文字上后,它变成黄色,下面是我截取的屏幕截图。

感谢大家对此话题的回答。 我可以按照 Vivek 的建议使用机器人截屏。

builder.moveToElement(getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li [@class='active hasflyout']")).perform(); 机器人robot = new Robot();

点点;

point = getSharedWebDriver().findElement(By.xpath("//div[@class='brand section']/ul/li[@class='active hasflyout']")).getLocation(); int x = point.getX(); int y = point.getY(); robot.mouseMove(x,y);

在理想情况下,应该使用 perform() 或 mouseMove()。但不知何故,就我而言,我不得不同时使用这两个功能。