From 49ad2493e8c00c9867d02e9a4b27693fe289d6fe Mon Sep 17 00:00:00 2001 From: Ivan Shubin Date: Sun, 15 Nov 2015 09:39:26 +0100 Subject: [PATCH] #158 Added screen and viewport elements to page dump --- .../com/galenframework/api/GalenPageDump.java | 8 +++-- .../components/mocks/driver/MockedDriver.java | 29 +++++++++++++++--- .../action/GalenPageActionDumpPageTest.java | 7 ++++- .../galenframework/tests/api/GalenTest.java | 30 ++++++++++++++++--- .../expected-without-excluded-objects.json | 8 +++++ .../src/test/resources/pagedump/expected.json | 8 +++++ 6 files changed, 79 insertions(+), 11 deletions(-) diff --git a/galen-core/src/main/java/com/galenframework/api/GalenPageDump.java b/galen-core/src/main/java/com/galenframework/api/GalenPageDump.java index 0ae0647f..c267106c 100644 --- a/galen-core/src/main/java/com/galenframework/api/GalenPageDump.java +++ b/galen-core/src/main/java/com/galenframework/api/GalenPageDump.java @@ -81,7 +81,6 @@ public void dumpPage(Browser browser, PageSpec pageSpec, String reportFolderPath } } - Set objectNames = pageSpec.getObjects().keySet(); PageValidation pageValidation = new PageValidation(browser, browser.getPage(), pageSpec, null, null); @@ -90,7 +89,12 @@ public void dumpPage(Browser browser, PageSpec pageSpec, String reportFolderPath List patterns = convertPatterns(excludedObjects); - for (String objectName : objectNames) { + Set finalObjectNames = new HashSet<>(); + finalObjectNames.addAll(objectNames); + finalObjectNames.add("screen"); + finalObjectNames.add("viewport"); + + for (String objectName : finalObjectNames) { if (!matchesExcludedPatterns(objectName, patterns)) { PageElement pageElement = pageValidation.findPageElement(objectName); diff --git a/galen-core/src/test/java/com/galenframework/components/mocks/driver/MockedDriver.java b/galen-core/src/test/java/com/galenframework/components/mocks/driver/MockedDriver.java index 5b0a7ab6..4a33f3ee 100644 --- a/galen-core/src/test/java/com/galenframework/components/mocks/driver/MockedDriver.java +++ b/galen-core/src/test/java/com/galenframework/components/mocks/driver/MockedDriver.java @@ -29,6 +29,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; public class MockedDriver implements WebDriver, TakesScreenshot, JavascriptExecutor { private MockedDriverPage page; @@ -37,6 +38,8 @@ public class MockedDriver implements WebDriver, TakesScreenshot, JavascriptExecu private Dimension screenSize = new Dimension(1024, 768); private List allExecutedJavascript = new LinkedList(); + private List expectedJavaScriptReturnValues; + public MockedDriver() { } @@ -224,23 +227,41 @@ else if (xOutputType.equals(OutputType.BYTES)) { else throw new RuntimeException("Cannot make screenshot"); } + private final AtomicInteger jsExecutionSteps = new AtomicInteger(0); + @Override public Object executeScript(String s, Object... objects) { allExecutedJavascript.add(s); - if (s.equals(GalenUtils.JS_RETRIEVE_DEVICE_PIXEL_RATIO)) { - return 1L; + if (expectedJavaScriptReturnValues != null) { + int step = jsExecutionSteps.getAndIncrement(); + return expectedJavaScriptReturnValues.get(step); + } else { + if (s.equals(GalenUtils.JS_RETRIEVE_DEVICE_PIXEL_RATIO)) { + return 1L; + } else return null; } - else return null; } @Override public Object executeAsyncScript(String s, Object... objects) { allExecutedJavascript.add(s); - return null; + if (expectedJavaScriptReturnValues != null) { + return expectedJavaScriptReturnValues.get(jsExecutionSteps.getAndIncrement()); + } else { + return null; + } } public List getAllExecutedJavascript() { return allExecutedJavascript; } + + public List getExpectedJavaScriptReturnValues() { + return expectedJavaScriptReturnValues; + } + + public void setExpectedJavaScriptReturnValues(List expectedJavaScriptReturnValues) { + this.expectedJavaScriptReturnValues = expectedJavaScriptReturnValues; + } } diff --git a/galen-core/src/test/java/com/galenframework/tests/action/GalenPageActionDumpPageTest.java b/galen-core/src/test/java/com/galenframework/tests/action/GalenPageActionDumpPageTest.java index c168c660..7c8bc1b7 100644 --- a/galen-core/src/test/java/com/galenframework/tests/action/GalenPageActionDumpPageTest.java +++ b/galen-core/src/test/java/com/galenframework/tests/action/GalenPageActionDumpPageTest.java @@ -27,6 +27,7 @@ import java.io.File; +import static java.util.Arrays.asList; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -37,8 +38,12 @@ public void shouldCreate_pageDump() throws Exception { String pageDumpPath = Files.createTempDir().getAbsolutePath() + "/pagedump"; - WebDriver driver = new MockedDriver(); + MockedDriver driver = new MockedDriver(); driver.get("/mocks/pages/galen4j-pagedump.json"); + driver.setExpectedJavaScriptReturnValues(asList( + (Object) asList(0L, 0L, 300L, 1000L), + (Object) asList(0L, 0L, 300L, 500L) + )); GalenPageAction pageAction = new GalenPageActionDumpPage("Test page", "/specs/galen4j/pagedump.spec", pageDumpPath); diff --git a/galen-core/src/test/java/com/galenframework/tests/api/GalenTest.java b/galen-core/src/test/java/com/galenframework/tests/api/GalenTest.java index 14566fc7..61bce5d9 100644 --- a/galen-core/src/test/java/com/galenframework/tests/api/GalenTest.java +++ b/galen-core/src/test/java/com/galenframework/tests/api/GalenTest.java @@ -67,8 +67,14 @@ public void checkLayout_shouldTestLayout_andReturnLayoutReport() throws IOExcept public void dumpPage_shouldGenereate_htmlJsonReport_andStorePicturesOfElements() throws IOException { String pageDumpPath = Files.createTempDir().getAbsolutePath() + "/pagedump"; - WebDriver driver = new MockedDriver(); + MockedDriver driver = new MockedDriver(); driver.get("/mocks/pages/galen4j-pagedump.json"); + driver.setExpectedJavaScriptReturnValues(asList( + asList(300L, 500L), + asList(300L, 1000L), + 1L + )); + new GalenPageDump("test page").dumpPage(driver, "/specs/galen4j/pagedump.spec", pageDumpPath); assertFileExists(pageDumpPath + "/page.json"); @@ -93,8 +99,13 @@ public void dumpPage_shouldGenereate_htmlJsonReport_andStorePicturesOfElements() public void dumpPage_shouldOnlyStoreScreenshots_thatAreLessThan_theMaxAllowed() throws IOException { String pageDumpPath = Files.createTempDir().getAbsolutePath() + "/pagedump"; - WebDriver driver = new MockedDriver(); + MockedDriver driver = new MockedDriver(); driver.get("/mocks/pages/galen4j-pagedump.json"); + driver.setExpectedJavaScriptReturnValues(asList( + (Object) asList(0L, 0L, 300L, 1000L), + (Object) asList(0L, 0L, 300L, 500L) + )); + new GalenPageDump("test page") .setMaxWidth(80) .setMaxHeight(80) @@ -119,8 +130,13 @@ public void dumpPage_shouldOnlyStoreScreenshots_thatAreLessThan_theMaxAllowed() public void dumpPage_shouldOnlyStoreScreenshots_withoutHtmlReport() throws IOException { String pageDumpPath = Files.createTempDir().getAbsolutePath() + "/pagedump"; - WebDriver driver = new MockedDriver(); + MockedDriver driver = new MockedDriver(); driver.get("/mocks/pages/galen4j-pagedump.json"); + driver.setExpectedJavaScriptReturnValues(asList( + (Object) asList(0L, 0L, 300L, 1000L), + (Object) asList(0L, 0L, 300L, 500L) + )); + new GalenPageDump("test page") .setMaxWidth(80) .setMaxHeight(80) @@ -145,8 +161,14 @@ public void dumpPage_shouldOnlyStoreScreenshots_withoutHtmlReport() throws IOExc public void dumpPage_shouldExcludeObjects_thatMatch_givenRegex() throws IOException { String pageDumpPath = Files.createTempDir().getAbsolutePath() + "/pagedump"; - WebDriver driver = new MockedDriver(); + MockedDriver driver = new MockedDriver(); driver.get("/mocks/pages/galen4j-pagedump.json"); + driver.setExpectedJavaScriptReturnValues(asList( + (Object) asList(300L, 500L), + (Object) asList(300L, 1000L), + (Object) 1L + )); + new GalenPageDump("test page") .setExcludedObjects(asList( "big-container", diff --git a/galen-core/src/test/resources/pagedump/expected-without-excluded-objects.json b/galen-core/src/test/resources/pagedump/expected-without-excluded-objects.json index bad11f32..16d48e17 100644 --- a/galen-core/src/test/resources/pagedump/expected-without-excluded-objects.json +++ b/galen-core/src/test/resources/pagedump/expected-without-excluded-objects.json @@ -9,6 +9,14 @@ "button-save": { "area": [10, 10, 100, 50], "hasImage":true + }, + "screen": { + "area": [0, 0, 300, 1000], + "hasImage": true + }, + "viewport": { + "area": [0, 0, 300, 500], + "hasImage": true } } } diff --git a/galen-core/src/test/resources/pagedump/expected.json b/galen-core/src/test/resources/pagedump/expected.json index cbbb4a7b..4d28eddd 100644 --- a/galen-core/src/test/resources/pagedump/expected.json +++ b/galen-core/src/test/resources/pagedump/expected.json @@ -25,6 +25,14 @@ "menu-item-3": { "area": [70, 10, 20, 10], "hasImage":true + }, + "screen": { + "area": [0, 0, 300, 1000], + "hasImage": true + }, + "viewport": { + "area": [0, 0, 300, 500], + "hasImage": true } } } \ No newline at end of file