Java 如何在SeleniumWebDriver中向截图添加文本?

Java 如何在SeleniumWebDriver中向截图添加文本?,java,selenium,appium,webpage-screenshot,Java,Selenium,Appium,Webpage Screenshot,我的问题可能有点鲁莽,但我想知道是否有人有使用SeleniumWebDriver或任何其他Java库向截图添加文本的经验?目前我正在利用: File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(screenShotFile, new File("C:\\XXX\\XXX\\SeleniumScreenshots\\" + "

我的问题可能有点鲁莽,但我想知道是否有人有使用SeleniumWebDriver或任何其他Java库向截图添加文本的经验?目前我正在利用:

File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(screenShotFile,  new File("C:\\XXX\\XXX\\SeleniumScreenshots\\" + "png"));

为了拍摄一个屏幕截图,它工作正常,但有时我需要在屏幕截图中添加一个描述性文本,如:“这是因为这个…”我需要的确切位置是页面的某些位置(例如,全局页脚、页眉、汉堡菜单、某些图像),这些位置可以通过xpath表达式找到,获取该位置的屏幕截图,并添加带有问题描述的文本。如果有人知道如何实现这一点,请给出示例代码

没什么!从@andrucz提供的链接调整代码

WebElement failedElement = driver.findElement(<locate your element>);
File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
final BufferedImage image = ImageIO.read(screenShotFile);
Graphics g = image.getGraphics();
g.setFont(g.getFont().deriveFont(30f));
g.drawString("Failed because of this!!", failedElement.getSize().getX(), failedElement.getSize().getY()); //Top-left coordinates of your failed element
g.dispose();
ImageIO.write(image, "png", new File("test.png"));
WebElement failedElement=driver.findElement();
文件屏幕快照文件=((TakesScreenshot)驱动程序).getScreenshotAs(OutputType.File);
final buffereImage image=ImageIO.read(屏幕快照文件);
Graphics g=image.getGraphics();
g、 setFont(g.getFont().deriveFont(30f));
g、 drawString(“因为这个原因失败!!”,FaileDelete.getSize().getX(),FaileDelete.getSize().getY())//失败元素的左上角坐标
g、 处置();
write(图像,“png”,新文件(“test.png”);

没什么!从@andrucz提供的链接调整代码

WebElement failedElement = driver.findElement(<locate your element>);
File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
final BufferedImage image = ImageIO.read(screenShotFile);
Graphics g = image.getGraphics();
g.setFont(g.getFont().deriveFont(30f));
g.drawString("Failed because of this!!", failedElement.getSize().getX(), failedElement.getSize().getY()); //Top-left coordinates of your failed element
g.dispose();
ImageIO.write(image, "png", new File("test.png"));
WebElement failedElement=driver.findElement();
文件屏幕快照文件=((TakesScreenshot)驱动程序).getScreenshotAs(OutputType.File);
final buffereImage image=ImageIO.read(屏幕快照文件);
Graphics g=image.getGraphics();
g、 setFont(g.getFont().deriveFont(30f));
g、 drawString(“因为这个原因失败!!”,FaileDelete.getSize().getX(),FaileDelete.getSize().getY())//失败元素的左上角坐标
g、 处置();
write(图像,“png”,新文件(“test.png”);

要直接绘制驱动程序返回的屏幕截图:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");

// take the screenshot
byte[] img_bytes = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
BufferedImage img = ImageIO.read(new ByteArrayInputStream(img_bytes));

// add some text and draw a rectangle
Graphics g = img.getGraphics();
g.setColor(Color.red);
g.setFont(new Font( "SansSerif", Font.BOLD, 14));
g.drawString("My text", 10, 10);
g.drawRect(5, 5, 50, 50);
g.dispose();

// save the image
ImageIO.write(img, "png", new File("screenshot.png"));
如果目标元素不在屏幕上,则您可能需要事先将其滚动到窗口中:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);

要直接绘制驱动程序返回的屏幕截图:

WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");

// take the screenshot
byte[] img_bytes = ((TakesScreenshot)driver).getScreenshotAs(OutputType.BYTES);
BufferedImage img = ImageIO.read(new ByteArrayInputStream(img_bytes));

// add some text and draw a rectangle
Graphics g = img.getGraphics();
g.setColor(Color.red);
g.setFont(new Font( "SansSerif", Font.BOLD, 14));
g.drawString("My text", 10, 10);
g.drawRect(5, 5, 50, 50);
g.dispose();

// save the image
ImageIO.write(img, "png", new File("screenshot.png"));
如果目标元素不在屏幕上,则您可能需要事先将其滚动到窗口中:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView(true);", element);

@andrucz的可能副本让我检查链接。@andrucz的可能副本让我检查链接。。