Selenium 2 and JUnit4: How to capture screenshot on exception?

前端 未结 1 2053
再見小時候
再見小時候 2021-02-02 00:40

I want to capture a screenshot only upon unexpected exception.

相关标签:
1条回答
  • 2021-02-02 01:05

    Note.- This answer could be outdated. The answer is based on Selenium 2.15

    Using TestWatcher does the trick (the unit test must extend following 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);
            }
        }
    };
    }
    

    Note

    Utils.getFirefoxDriver() returns a customized WebDriver. Something like:

    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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题