PageRenderTime 27ms CodeModel.GetById 1ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-webdriver/atlassian-webdriver-core/src/test/java/com/atlassian/webdriver/it/visualcomparison/TestComparerV2ApiCompatibility.java

https://bitbucket.org/atlassian/atlassian-selenium
Java | 207 lines | 176 code | 31 blank | 0 comment | 2 complexity | facac7f5023d29b5dfe9b1ff02978e30 MD5 | raw file
  1. package com.atlassian.webdriver.it.visualcomparison;
  2. import com.atlassian.selenium.visualcomparison.VisualComparer;
  3. import com.atlassian.selenium.visualcomparison.utils.BoundingBox;
  4. import com.atlassian.selenium.visualcomparison.utils.ScreenResolution;
  5. import com.atlassian.selenium.visualcomparison.v2.Comparer;
  6. import com.atlassian.selenium.visualcomparison.v2.DefaultComparer;
  7. import com.atlassian.selenium.visualcomparison.v2.VisualComparisonFailedException;
  8. import com.atlassian.selenium.visualcomparison.v2.settings.Resolution;
  9. import com.atlassian.webdriver.debug.WebDriverDebug;
  10. import com.atlassian.webdriver.it.AbstractSimpleServerTest;
  11. import com.atlassian.webdriver.it.pageobjects.page.VisualComparisonPage;
  12. import com.atlassian.webdriver.rule.test.TemporaryFolderPreservingOnFailure;
  13. import com.atlassian.webdriver.testing.annotation.WindowSize;
  14. import com.atlassian.webdriver.visualcomparison.VisualComparisonSupport;
  15. import com.atlassian.webdriver.visualcomparison.WebDriverBrowserEngine;
  16. import com.atlassian.webdriver.visualcomparison.WebDriverVisualComparableClient;
  17. import org.apache.commons.io.IOUtils;
  18. import org.junit.Before;
  19. import org.junit.Rule;
  20. import org.junit.Test;
  21. import org.openqa.selenium.By;
  22. import org.openqa.selenium.Dimension;
  23. import org.openqa.selenium.JavascriptExecutor;
  24. import org.openqa.selenium.Point;
  25. import org.openqa.selenium.WebDriver;
  26. import org.openqa.selenium.WebElement;
  27. import javax.inject.Inject;
  28. import java.io.File;
  29. import java.io.FileOutputStream;
  30. import java.io.IOException;
  31. import java.io.InputStream;
  32. import java.io.OutputStream;
  33. import java.util.ArrayList;
  34. import java.util.List;
  35. import static com.atlassian.selenium.visualcomparison.v2.ComparisonSettings.emptySettings;
  36. import static com.atlassian.selenium.visualcomparison.v2.settings.Resolution.R1024_768;
  37. import static org.apache.commons.io.FileUtils.readFileToString;
  38. import static org.junit.Assert.assertEquals;
  39. import static org.junit.Assert.assertFalse;
  40. import static org.junit.Assert.fail;
  41. @WindowSize(width = 1024, height = 768)
  42. public class TestComparerV2ApiCompatibility extends AbstractSimpleServerTest
  43. {
  44. private static final String RESOLUTION_STRING = R1024_768.toString();
  45. private static final String TEST_1_ID = "test-1";
  46. private static final String BASELINE_1_NAME = TEST_1_ID + "." + RESOLUTION_STRING + ".png";
  47. private static final String REPORT_1_FILE_NAME = "report-" + TEST_1_ID + "-" + RESOLUTION_STRING + ".html";
  48. private static final String TEST_2_ID = "test-2";
  49. private static final String BASELINE_2_NAME = TEST_2_ID + "." + RESOLUTION_STRING + ".png";
  50. private static final String REPORT_2_FILE_NAME = "report-" + TEST_2_ID + "-" + RESOLUTION_STRING + ".html";
  51. private static final String[] BASELINES = { BASELINE_2_NAME };
  52. @Inject
  53. private WebDriver webDriver;
  54. @Inject
  55. private VisualComparisonSupport comparisonSupport;
  56. @Inject
  57. private WebDriverDebug webDriverDebug;
  58. @Rule
  59. public final TemporaryFolderPreservingOnFailure testFolder =
  60. new TemporaryFolderPreservingOnFailure(new File("target/visualcomparisontests"));
  61. private File baselineDir;
  62. private File v1reportDir;
  63. private File v2reportDir;
  64. @Before
  65. public void setUpDirs() throws IOException
  66. {
  67. baselineDir = testFolder.getFolder().newFolder("baseline");
  68. v1reportDir = testFolder.getFolder().newFolder("reports-v1");
  69. v2reportDir = testFolder.getFolder().newFolder("reports-v2");
  70. copyBaselines();
  71. }
  72. private void copyBaselines() throws IOException
  73. {
  74. for (String baseline : BASELINES)
  75. {
  76. copyBaseline(baseline);
  77. }
  78. }
  79. private void copyBaseline(String baselineName) throws IOException
  80. {
  81. InputStream baseline = null;
  82. OutputStream baselineFile = null;
  83. try
  84. {
  85. baseline = getClass().getResourceAsStream("/visualcomparison/" + baselineName);
  86. baselineFile = new FileOutputStream(new File(baselineDir, baselineName));
  87. IOUtils.copy(baseline, baselineFile);
  88. }
  89. finally
  90. {
  91. IOUtils.closeQuietly(baseline);
  92. IOUtils.closeQuietly(baselineFile);
  93. }
  94. }
  95. @Test
  96. public void testCompatibilitySuccessfulCompare() throws IOException
  97. {
  98. product.visit(VisualComparisonPage.class, 1);
  99. VisualComparer legacyComparer = getLegacyComparer();
  100. addIgnoredElementOldStyle(legacyComparer, By.className("aui-header-logo-device"));
  101. webDriverDebug.takeScreenshotTo(new File(baselineDir, BASELINE_1_NAME));
  102. legacyComparer.assertUIMatches(TEST_1_ID, baselineDir.getAbsolutePath());
  103. Comparer newComparer = new DefaultComparer(new WebDriverBrowserEngine(webDriver), emptySettings()
  104. .withResolution(Resolution.R1024_768)
  105. .withBaselineDirectory(baselineDir)
  106. .withReportingEnabled(v2reportDir)
  107. .ignoringSingleLineDifferences(true));
  108. newComparer.compare("test-1", emptySettings()
  109. .ignoringPart(comparisonSupport.asPagePart(By.className("aui-header-logo-device"))));
  110. assertFalse("Report HTML for V1 should not exist", new File(v1reportDir, REPORT_1_FILE_NAME).exists());
  111. assertFalse("Report HTML for V2 should not exist", new File(v2reportDir, REPORT_1_FILE_NAME).exists());
  112. }
  113. @Test
  114. public void testCompatibilityFailedCompare() throws IOException
  115. {
  116. VisualComparer legacyComparer = getLegacyComparer();
  117. product.visit(VisualComparisonPage.class, 2);
  118. try
  119. {
  120. legacyComparer.assertUIMatches(TEST_2_ID, baselineDir.getAbsolutePath());
  121. fail("Legacy comparer should throw exception on comparison failure");
  122. }
  123. catch (AssertionError expected)
  124. {
  125. }
  126. Comparer newComparer = new DefaultComparer(new WebDriverBrowserEngine(webDriver), emptySettings()
  127. .withResolution(Resolution.R1024_768)
  128. .withBaselineDirectory(baselineDir)
  129. .withReportingEnabled(v2reportDir)
  130. .ignoringSingleLineDifferences(true));
  131. try
  132. {
  133. newComparer.compare(TEST_2_ID);
  134. fail("New comparer should throw exception on comparison failure");
  135. }
  136. catch (VisualComparisonFailedException expected)
  137. {
  138. }
  139. assertEquals(readFileToString(new File(v1reportDir, REPORT_2_FILE_NAME)),
  140. readFileToString(new File(v2reportDir, REPORT_2_FILE_NAME)));
  141. }
  142. @Test(expected = VisualComparisonFailedException.class)
  143. public void testBaselineMissing()
  144. {
  145. Comparer comparer = new DefaultComparer(new WebDriverBrowserEngine(webDriver), emptySettings()
  146. .withResolution(Resolution.R1024_768)
  147. .withBaselineDirectory(baselineDir)
  148. .withReportingEnabled(v2reportDir)
  149. .ignoringSingleLineDifferences(true));
  150. product.visit(VisualComparisonPage.class, 1);
  151. comparer.compare("test-3"); // baseline doesn't exist, should error out
  152. }
  153. private VisualComparer getLegacyComparer()
  154. {
  155. VisualComparer oldComparer = new VisualComparer(new WebDriverVisualComparableClient(webDriver, (JavascriptExecutor) webDriver));
  156. oldComparer.setScreenResolutions(new ScreenResolution[] {
  157. new ScreenResolution(1024, 768)
  158. });
  159. oldComparer.setWaitforJQueryTimeout(2000);
  160. oldComparer.setIgnoreSingleLineDiffs(true);
  161. oldComparer.enableReportGeneration(v1reportDir.getAbsolutePath());
  162. return oldComparer;
  163. }
  164. private void addIgnoredElementOldStyle(VisualComparer oldComparer, By selector)
  165. {
  166. WebElement elementBySelector = webDriver.findElement(selector);
  167. Dimension size = elementBySelector.getSize();
  168. Point location = elementBySelector.getLocation();
  169. BoundingBox elementArea = new BoundingBox(location.x, location.y, location.x + size.getWidth(),
  170. location.y + size.getHeight());
  171. List<BoundingBox> ignoreAreas = oldComparer.getIgnoreAreas();
  172. ignoreAreas = (null == ignoreAreas) ? new ArrayList<BoundingBox>() : new ArrayList<BoundingBox>(ignoreAreas);
  173. ignoreAreas.add(elementArea);
  174. oldComparer.setIgnoreAreas(ignoreAreas);
  175. }
  176. }