Для того, чтобы сделать скриншот страницы нужно вызвать метод getScreenshotAs(OutputType target)
, объявленный в интерфейсе TakesScreenshot
. В качестве параметра он принимает значение, которое влияет на тип возвращаемого методом результата:
- BASE64 — получить скриншот в формате данных base64;
- BYTES — получить скриншот как набор байт;
- FILE — получить скриншот, сохраненный во временный файл, который будет удален после завершения работы JVM. Разработчик должен самостоятельно сделать копию этого файла.
Пример получения скриншота страницы на локальной машине:
import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; WebDriver driver = new FirefoxDriver(); driver.get("http://internetka.in.ua"); File screenshot = ((TakesScreenshot) driver). getScreenshotAs(OutputType.FILE); String path = "./target/screenshots/" + screenshot.getName(); FileUtils.copyFile(screenshot, new File(path));
RemoteWebDriver
не реализует методы интерфейса TakesScreenshot
, поэтому для того, чтобы сделать скриншот на удаленной машине нужно сначала добавить интерфейс TakesScreenshot
в класс RemoteWebDriver
. Это можно выполнить с помощью класса Augmenter
, который расширяет интерфейсы RemoteWebDriver
на основе возвращаемых Capabilities
драйвера.
Для снятия снимка экрана на удаленной машине код будет следующий:
import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.Augmenter; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; WebDriver driver = new RemoteWebDriver( new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox()); driver.get("http://internetka.in.ua"); WebDriver augmentedDriver = new Augmenter().augment(driver); File screenshot = ((TakesScreenshot)augmentedDriver). getScreenshotAs(OutputType.FILE);
Для того, чтобы сделать скриншот в случае если, например, тест завершился неудачей, приведенный код можно поместить в класс, прослушивающий выполнение теста и выполнить при завершении теста с ошибкой. Подробнее про то, как это сделать, можно почитать здесь. Для того, чтобы получить доступ к переменной driver
из другого класса ее можно сделать статической (static) в базовом классе.