我正在尝试使用TakesScreenshot
拍摄子菜单的截图,该截图发生在使用contactUs.hoverHM();
screenshot = ((TakesScreenshot) PageFactoryBase.getSharedWebDriver()).getScreenshotAs(OutputType.BYTES);
scenario.embed(screenshot, "image/png");
在硒中悬停时。但这不起作用。屏幕截图已被拍摄,但图像中不存在子菜单。
我也曾尝试在悬停后使用隐式等待,但没有任何效果。
请建议一种方法来捕获子菜单的屏幕截图。
{{1}}
答案 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);
将鼠标悬停在文本上后,它变为黄色,下面是我拍摄的屏幕截图。
答案 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()。但不知何故,在我的情况下,我不得不使用这两个函数。