Как добавить текст к сделанному снимку экрана в Selenium WebDriver?

Мой вопрос может быть немного безрассудным, но я хотел бы знать, есть ли у кого-нибудь опыт добавления текста к сделанному снимку экрана с помощью Selenium WebDriver или любой другой библиотеки Java? В настоящее время я использую:

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

чтобы сделать снимок экрана, и он работает нормально, но иногда мне нужно добавить описательный текст к снимку экрана что-то вроде: «Это не удалось из-за этого ...» Мне нужно точно определенное местоположение страницы (например, глобальное нижний колонтитул, заголовок, бургер-меню, определенное изображение), которые можно найти с помощью выражения xpath, сделайте скриншот этого места и добавьте текст с описанием проблемы. Если у кого-то есть идея, как это можно реализовать, пожалуйста, пришлите пример кода.


person TiredOfProgramming    schedule 07.03.2016    source источник


Ответы (2)


Ничего особенного! Настройка кода по ссылке, предоставленной @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"));
person Naman    schedule 07.03.2016

Чтобы напрямую рисовать на снимке экрана, возвращенном драйвером:

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);
person Florent B.    schedule 07.03.2016