diff --git a/src/main/java/util/driver/DriverHelper.java b/src/main/java/util/driver/DriverHelper.java index 8bb293a..d12b680 100644 --- a/src/main/java/util/driver/DriverHelper.java +++ b/src/main/java/util/driver/DriverHelper.java @@ -156,7 +156,11 @@ public static void scrollUpMobileElement(AppiumDriver driver, MobileElement elem public static void zoomInOutPage(WebDriver driver, int zoomPercent) { if (zoomPercent > 0) { JavascriptExecutor jse = (JavascriptExecutor) driver; - jse.executeScript("document.body.style.zoom = '" + zoomPercent + "%'"); + if (isFirefox()) { + jse.executeScript("document.body.style.MozTransform = 'scale(" + (zoomPercent / 100f) + ")';"); + } else { + jse.executeScript("document.body.style.zoom = '" + zoomPercent + "%'"); + } } } diff --git a/src/main/java/util/validator/ResponsiveUIValidator.java b/src/main/java/util/validator/ResponsiveUIValidator.java index 3fa4261..de58b86 100644 --- a/src/main/java/util/validator/ResponsiveUIValidator.java +++ b/src/main/java/util/validator/ResponsiveUIValidator.java @@ -22,8 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; -import static environment.EnvironmentFactory.isChrome; -import static environment.EnvironmentFactory.isMobile; +import static environment.EnvironmentFactory.*; import static util.general.SystemHelper.isAutomotionFolderExists; import static util.general.SystemHelper.isRetinaDisplay; import static util.validator.Constants.*; @@ -41,6 +40,7 @@ public class ResponsiveUIValidator { private static Color rootColor = new Color(255, 0, 0, 255); private static Color highlightedElementsColor = new Color(255, 0, 255, 255); private static Color linesColor = Color.ORANGE; + private static String currentZoom = "100%"; private static File screenshot; private static BufferedImage img; private static Graphics2D g; @@ -697,8 +697,16 @@ String getFormattedMessage(WebElement element) { } int getRetinaValue(int value) { - if (isRetinaDisplay() && isChrome()) { - return 2 * value; + if (!isMobile()) { + int zoom = Integer.valueOf(currentZoom.replace("%", "")); + if (zoom != 100) { + value = (int) (value - (value * Math.abs(zoom - 100f) / 100f)); + } + if (isRetinaDisplay() && isChrome()) { + return 2 * value; + } else { + return value; + } } else { return value; } @@ -707,7 +715,17 @@ int getRetinaValue(int value) { long getPageWidth() { if (!isMobile()) { JavascriptExecutor executor = (JavascriptExecutor) driver; - return (long) executor.executeScript("if (self.innerWidth) {return self.innerWidth;} if (document.documentElement && document.documentElement.clientWidth) {return document.documentElement.clientWidth;}if (document.body) {return document.body.clientWidth;}"); + if (isFirefox()) { + currentZoom = (String) executor.executeScript("document.body.style.MozTransform"); + } else { + currentZoom = (String) executor.executeScript("return document.body.style.zoom;"); + } + if (currentZoom == null || currentZoom.equals("100%") || currentZoom.equals("")) { + currentZoom = "100%"; + return (long) executor.executeScript("if (self.innerWidth) {return self.innerWidth;} if (document.documentElement && document.documentElement.clientWidth) {return document.documentElement.clientWidth;}if (document.body) {return document.body.clientWidth;}"); + } else { + return (long) executor.executeScript("return document.getElementsByTagName('body')[0].offsetWidth"); + } } else { return driver.manage().window().getSize().width; } @@ -716,7 +734,17 @@ long getPageWidth() { long getPageHeight() { if (!isMobile()) { JavascriptExecutor executor = (JavascriptExecutor) driver; - return (long) executor.executeScript("if (self.innerHeight) {return self.innerHeight;} if (document.documentElement && document.documentElement.clientHeight) {return document.documentElement.clientHeight;}if (document.body) {return document.body.clientHeight;}"); + if (isFirefox()) { + currentZoom = (String) executor.executeScript("document.body.style.MozTransform"); + } else { + currentZoom = (String) executor.executeScript("return document.body.style.zoom;"); + } + if (currentZoom == null || currentZoom.equals("100%") || currentZoom.equals("")) { + currentZoom = "100%"; + return (long) executor.executeScript("if (self.innerHeight) {return self.innerHeight;} if (document.documentElement && document.documentElement.clientHeight) {return document.documentElement.clientHeight;}if (document.body) {return document.body.clientHeight;}"); + } else { + return (long) executor.executeScript("return document.getElementsByTagName('body')[0].offsetHeight"); + } } else { return driver.manage().window().getSize().height; } diff --git a/src/test/java/ResponsiveValidatorTest.java b/src/test/java/ResponsiveValidatorTest.java index 1861490..856c54a 100644 --- a/src/test/java/ResponsiveValidatorTest.java +++ b/src/test/java/ResponsiveValidatorTest.java @@ -6,6 +6,7 @@ import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; +import util.driver.DriverHelper; import util.driver.WebDriverFactory; import util.validator.ResponsiveUIValidator; @@ -28,6 +29,7 @@ public void testThatResponsiveValidatorWorks() { WebDriverFactory driverFactory = new WebDriverFactory(); driver = driverFactory.getDriver(); driver.get("http:/visual.itarray.net"); + driver.manage().window().maximize(); TestPage page = new TestPage(driver); @@ -100,6 +102,19 @@ public void testThatResponsiveValidatorWorks() { softly.assertThat(success).isEqualTo(true).overridingErrorMessage("Failed validation of Grid in a list"); } + int[] zoomRange = {50, 70, 100, 120, 150}; + + for (int val : zoomRange) { + DriverHelper.zoomInOutPage(driver, val); + boolean success = uiValidator.init("Validate on page zoom " + val + "%") + .findElement(page.mainContainer(), "Main container") + .equalLeftRightOffset() + .drawMap() + .validate(); + + softly.assertThat(success).isEqualTo(true).overridingErrorMessage("Failed validation of Container"); + } + uiValidator.generateReport("Home Page"); softly.assertAll();