Селен 2 и JUnit4: как захватить скриншот на исключение?

Я хочу захватить скриншот только при неожиданном исключении.

1 ответов


Примечание.- Этот ответ может быть устаревшим. Ответ основан на Селене 2.15

используя TestWatcher делает трюк (модульный тест должен распространяться после BaseTest):

public abstract class BaseTest {
// ...
protected WebDriver driver;


@Rule
public TestRule testWatcher = new TestWatcher() {
    @Override
    public void starting(Description desc) {
        LOG.info("Launching browser...");
        driver = Utils.getFirefoxDriver();
    }

    @Override
    public void finished(Description desc) {
        LOG.info("Quitting driver...");
        driver.quit();
    }

    @Override
    public void failed(Throwable e, Description d) {
        LOG.debug("Creating screenshot...");
        File scrFile = ((TakesScreenshot) driver).getScreenshotAs(
                OutputType.FILE);
        String scrFilename = "Screenshot.png";
        File outputFile = new File(SCREEN_SHOTS_RESULTS_PATH, scrFilename);
        LOG.info(scrFilename + " screenshot created.");
        try {
            org.​apache.​commons.​io.FileUtils.copyFile(scrFile, outputFile);
        } catch (IOException ioe) {
            LOG.error("Error copying screenshot after exception.", ioe);
        }
    }
};
}

Примечание

Utils.getFirefoxDriver() возвращает индивидуальные WebDriver. Что-то вроде:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;

public class Utils {
    // ...
    public static WebDriver getFirefoxDriver() {
        FirefoxProfile firefoxProfile = new FirefoxProfile();

        // Profile customization. For example:
        // firefoxProfile.addExtension("firebug-1.8.4-fx.xpi");
        // firefoxProfile.setPreference("extensions.firebug.currentVersion","1.8.4");

        FirefoxBinary firefox = new FirefoxBinary();

        // Firefox customization. For example:
        // firefox.setEnvironmentProperty("DISPLAY", display);

        WebDriver driver = new FirefoxDriver(firefox, firefoxProfile);

        // WebDriver customizations. For example:
        // driver.manage().timeouts().implicitlyWait(SHORT_TIMEOUT_S, TimeUnit.SECONDS);
        return driver;
    }
}