View Javadoc

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   * Similarly to {@link com.atlassian.webdriver.testing.rule.WebDriverScreenshotRule}, this rule will
18   * dump page source directly to the log upon test failure.
19   *
20   * @since 2.1
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  }