1 package com.atlassian.webdriver.testing.rule;
2
3 import com.atlassian.webdriver.browsers.WebDriverBrowserAutoInstall;
4 import com.google.common.base.Supplier;
5 import com.google.common.base.Suppliers;
6 import org.junit.rules.TestWatcher;
7 import org.junit.runner.Description;
8 import org.openqa.selenium.WebDriver;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import javax.inject.Inject;
13
14 import static com.google.common.base.Preconditions.checkNotNull;
15
16
17
18
19
20
21
22 public final class LogPageSourceRule extends TestWatcher
23 {
24 private static final Logger DEFAULT_LOGGER = LoggerFactory.getLogger(LogPageSourceRule.class);
25
26 private static final String ENABLE_LOG_KEY = "atlassian.test.logSourceOnFailure";
27
28 private final Logger logger;
29 private final Supplier<? extends WebDriver> webDriver;
30
31 @Inject
32 public LogPageSourceRule(WebDriver webDriver, Logger logger)
33 {
34 this(Suppliers.ofInstance(checkNotNull(webDriver, "webDriver")),logger);
35 }
36
37 public LogPageSourceRule(Supplier<? extends WebDriver> webDriver, Logger logger)
38 {
39 this.webDriver = checkNotNull(webDriver, "webDriver");
40 this.logger = checkNotNull(logger, "logger");
41 }
42
43 public LogPageSourceRule(Logger logger)
44 {
45 this(WebDriverBrowserAutoInstall.driverSupplier(), logger);
46 }
47
48 public LogPageSourceRule()
49 {
50 this(DEFAULT_LOGGER);
51 }
52
53 @Override
54 public void failed(final Throwable e, final Description description)
55 {
56 if (!logPageSourceEnabled())
57 {
58 return;
59 }
60 logger.info("----- Test '{}' Failed. ", description.getMethodName());
61 logger.info("----- START PAGE SOURCE DUMP\n\n\n{}\n\n\n", webDriver.get().getPageSource());
62 logger.info("----- END PAGE SOURCE DUMP");
63 }
64
65 private boolean logPageSourceEnabled()
66 {
67 return Boolean.TRUE.toString().equals(System.getProperty(ENABLE_LOG_KEY));
68 }
69 }