Skip to content

Commit a485a7b

Browse files
committed
[1.4.2-update-error-messages] - implemented function for getting web page size correctly
1 parent 3de6289 commit a485a7b

File tree

5 files changed

+76
-63
lines changed

5 files changed

+76
-63
lines changed

src/main/java/util/validator/ResponsiveUIChunkValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ public class ResponsiveUIChunkValidator extends ResponsiveUIValidator implements
1313
ResponsiveUIChunkValidator(WebDriver driver, List<WebElement> elements) {
1414
super(driver);
1515
rootElements = elements;
16-
pageWidth = isRetinaDisplay() && isChrome() ? 2 * driver.manage().window().getSize().getWidth() : driver.manage().window().getSize().getWidth();
17-
pageHeight = isRetinaDisplay() && isChrome() ? 2 * driver.manage().window().getSize().getHeight() : driver.manage().window().getSize().getHeight();
16+
pageWidth = (int) getPageWidth();
17+
pageHeight = (int) getPageHeight();
1818
rootElement = rootElements.get(0);
1919
startTime = System.currentTimeMillis();
2020
}

src/main/java/util/validator/ResponsiveUIValidator.java

Lines changed: 57 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.openqa.selenium.Point;
1111
import util.driver.PageValidator;
1212
import util.general.HtmlReportBuilder;
13-
import util.general.SystemHelper;
1413

1514
import javax.imageio.ImageIO;
1615
import java.awt.*;
@@ -24,6 +23,7 @@
2423
import java.util.concurrent.atomic.AtomicLong;
2524

2625
import static environment.EnvironmentFactory.isChrome;
26+
import static environment.EnvironmentFactory.isMobile;
2727
import static util.general.SystemHelper.isAutomotionFolderExists;
2828
import static util.general.SystemHelper.isRetinaDisplay;
2929
import static util.validator.Constants.*;
@@ -44,6 +44,7 @@ public class ResponsiveUIValidator {
4444
private static File screenshot;
4545
private static BufferedImage img;
4646
private static Graphics2D g;
47+
private static JSONArray errorMessage;
4748
String rootElementReadableName = "Root Element";
4849
List<WebElement> rootElements;
4950
boolean drawLeftOffsetLine = false;
@@ -57,9 +58,6 @@ public class ResponsiveUIValidator {
5758
int heightRoot;
5859
int pageWidth;
5960
int pageHeight;
60-
int rootElementRightOffset;
61-
int rootElementBottomOffset;
62-
private JSONArray errorMessage;
6361

6462
public ResponsiveUIValidator(WebDriver driver) {
6563
ResponsiveUIValidator.driver = driver;
@@ -206,13 +204,7 @@ void drawScreenshot() {
206204

207205
g.setColor(highlightedElementsColor);
208206
g.setStroke(new BasicStroke(2));
209-
if (isRetinaDisplay() && isChrome()) {
210-
g.drawRect(2 * (int) x, 2 * (int) y, 2 * (int) width, 2 * (int) height);
211-
//g.fillRect(2 * (int) x, 2 * (int) y, 2 * (int) width, 2 * (int) height);
212-
} else {
213-
g.drawRect((int) x, (int) y, (int) width, (int) height);
214-
//g.fillRect(2 * (int) x, 2 * (int) y, 2 * (int) width, 2 * (int) height);
215-
}
207+
g.drawRect(getRetinaValue((int) x), getRetinaValue((int) y), getRetinaValue((int) width), getRetinaValue((int) height));
216208
}
217209
}
218210

@@ -351,6 +343,8 @@ void validateOverlappingWithElements(WebElement element, String readableName) {
351343
}
352344

353345
void validateMaxOffset(int top, int right, int bottom, int left) {
346+
int rootElementRightOffset = getRightOffset(rootElement);
347+
int rootElementBottomOffset = getBottomOffset(rootElement);
354348
if (xRoot > left) {
355349
putJsonDetailsWithoutElement(String.format("Expected max left offset of element '%s' is: %spx. Actual left offset is: %spx", rootElementReadableName, left, xRoot));
356350
}
@@ -366,6 +360,8 @@ void validateMaxOffset(int top, int right, int bottom, int left) {
366360
}
367361

368362
void validateMinOffset(int top, int right, int bottom, int left) {
363+
int rootElementRightOffset = getRightOffset(rootElement);
364+
int rootElementBottomOffset = getBottomOffset(rootElement);
369365
if (xRoot < left) {
370366
putJsonDetailsWithoutElement(String.format("Expected min left offset of element '%s' is: %spx. Actual left offset is: %spx", rootElementReadableName, left, xRoot));
371367
}
@@ -556,7 +552,7 @@ void validateLeftElement(WebElement leftElement) {
556552
}
557553
}
558554

559-
boolean elementsAreOverlappedOnBorder(WebElement rootElement, WebElement elementOverlapWith) {
555+
private boolean elementsAreOverlappedOnBorder(WebElement rootElement, WebElement elementOverlapWith) {
560556
Point elLoc = elementOverlapWith.getLocation();
561557
Dimension elSize = elementOverlapWith.getSize();
562558
int xRoot = rootElement.getLocation().x;
@@ -577,7 +573,7 @@ boolean elementsAreOverlappedOnBorder(WebElement rootElement, WebElement element
577573
return sqCommon - sqElement >= sqRootElement;
578574
}
579575

580-
boolean elementsAreOverlapped(WebElement elementOverlapWith) {
576+
private boolean elementsAreOverlapped(WebElement elementOverlapWith) {
581577
Point elLoc = elementOverlapWith.getLocation();
582578
Dimension elSize = elementOverlapWith.getSize();
583579
return ((xRoot >= elLoc.x && yRoot > elLoc.y && xRoot < elLoc.x + elSize.width && yRoot < elLoc.y + elSize.height)
@@ -593,7 +589,7 @@ boolean elementsAreOverlapped(WebElement elementOverlapWith) {
593589
|| elementsAreOverlappedOnBorder(rootElement, elementOverlapWith);
594590
}
595591

596-
boolean elementsAreOverlapped(WebElement rootElement, WebElement elementOverlapWith) {
592+
private boolean elementsAreOverlapped(WebElement rootElement, WebElement elementOverlapWith) {
597593
Point elLoc = elementOverlapWith.getLocation();
598594
Dimension elSize = elementOverlapWith.getSize();
599595
int xRoot = rootElement.getLocation().x;
@@ -614,7 +610,7 @@ boolean elementsAreOverlapped(WebElement rootElement, WebElement elementOverlapW
614610
|| elementsAreOverlappedOnBorder(rootElement, elementOverlapWith);
615611
}
616612

617-
boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement elementToCompare) {
613+
private boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement elementToCompare) {
618614
Point elLoc = elementToCompare.getLocation();
619615
Dimension elSize = elementToCompare.getSize();
620616

@@ -625,7 +621,7 @@ boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement elementToCom
625621
}
626622
}
627623

628-
boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement element, WebElement elementToCompare) {
624+
private boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement element, WebElement elementToCompare) {
629625
Point elLoc = elementToCompare.getLocation();
630626
Dimension elSize = elementToCompare.getSize();
631627
int xRoot = element.getLocation().x;
@@ -639,7 +635,7 @@ boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement element, Web
639635
}
640636

641637

642-
boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement elementToCompare) {
638+
private boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement elementToCompare) {
643639
Point elLoc = elementToCompare.getLocation();
644640
Dimension elSize = elementToCompare.getSize();
645641

@@ -650,7 +646,7 @@ boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement elementToComp
650646
}
651647
}
652648

653-
boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement element, WebElement elementToCompare) {
649+
private boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement element, WebElement elementToCompare) {
654650
Point elLoc = elementToCompare.getLocation();
655651
Dimension elSize = elementToCompare.getSize();
656652
int yRoot = element.getLocation().y;
@@ -663,83 +659,62 @@ boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement element, WebE
663659
}
664660
}
665661

666-
void validateEqualLeftRightOffset(WebElement element, String rootElementReadableName){
667-
if (!elementHasEqualLeftRightOffset(element)){
662+
void validateEqualLeftRightOffset(WebElement element, String rootElementReadableName) {
663+
if (!elementHasEqualLeftRightOffset(element)) {
668664
putJsonDetailsWithElement(String.format("Element '%s' has not equal left and right offset. Left offset is %dpx, right is %dpx", rootElementReadableName, getLeftOffset(element), getRightOffset(element)), element);
669665
}
670666
}
671667

672-
void validateEqualTopBottomOffset(WebElement element, String rootElementReadableName){
673-
if (!elementHasEqualTopBottomOffset(element)){
668+
void validateEqualTopBottomOffset(WebElement element, String rootElementReadableName) {
669+
if (!elementHasEqualTopBottomOffset(element)) {
674670
putJsonDetailsWithElement(String.format("Element '%s' has not equal top and bottom offset. Top offset is %dpx, bottom is %dpx", rootElementReadableName, getTopOffset(element), getBottomOffset(element)), element);
675671
}
676672
}
677673

678-
void validateEqualLeftRightOffset(List<WebElement> elements){
679-
for (WebElement element: elements) {
674+
void validateEqualLeftRightOffset(List<WebElement> elements) {
675+
for (WebElement element : elements) {
680676
if (!elementHasEqualLeftRightOffset(element)) {
681677
putJsonDetailsWithElement(String.format("Element '%s' has not equal left and right offset. Left offset is %dpx, right is %dpx", getFormattedMessage(element), getLeftOffset(element), getRightOffset(element)), element);
682678
}
683679
}
684680
}
685681

686-
void validateEqualTopBottomOffset(List<WebElement> elements){
687-
for (WebElement element: elements) {
682+
void validateEqualTopBottomOffset(List<WebElement> elements) {
683+
for (WebElement element : elements) {
688684
if (!elementHasEqualTopBottomOffset(element)) {
689685
putJsonDetailsWithElement(String.format("Element '%s' has not equal top and bottom offset. Top offset is %dpx, bottom is %dpx", getFormattedMessage(element), getTopOffset(element), getBottomOffset(element)), element);
690686
}
691687
}
692688
}
693689

694-
boolean elementHasEqualLeftRightOffset(WebElement element) {
690+
private boolean elementHasEqualLeftRightOffset(WebElement element) {
695691
return getLeftOffset(element) == getRightOffset(element);
696692
}
697693

698-
boolean elementHasEqualTopBottomOffset(WebElement element) {
694+
private boolean elementHasEqualTopBottomOffset(WebElement element) {
699695
return getTopOffset(element) == getBottomOffset(element);
700696
}
701697

702698
void drawRoot(Color color) {
703699
g.setColor(color);
704700
g.setStroke(new BasicStroke(2));
705-
if (isRetinaDisplay() && isChrome()) {
706-
g.drawRect(2 * xRoot, 2 * yRoot, 2 * widthRoot, 2 * heightRoot);
707-
//g.fillRect(2 * xRoot, 2 * yRoot, 2 * widthRoot, 2 * heightRoot);
708-
} else {
709-
g.drawRect(xRoot, yRoot, widthRoot, heightRoot);
710-
//g.fillRect(xRoot, yRoot, widthRoot, heightRoot);
711-
}
701+
g.drawRect(getRetinaValue(xRoot), getRetinaValue(yRoot), getRetinaValue(widthRoot), getRetinaValue(heightRoot));
702+
//g.fillRect(getRetinaValue(xRoot), getRetinaValue((yRoot), getRetinaValue(widthRoot), getRetinaValue(heightRoot));
712703

713704
Stroke dashed = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
714705
g.setStroke(dashed);
715706
g.setColor(linesColor);
716707
if (drawLeftOffsetLine) {
717-
if (isRetinaDisplay() && isChrome()) {
718-
g.drawLine(2 * xRoot, 0, 2 * xRoot, 2 * img.getHeight());
719-
} else {
720-
g.drawLine(xRoot, 0, xRoot, img.getHeight());
721-
}
708+
g.drawLine(getRetinaValue(xRoot), 0, getRetinaValue(xRoot), getRetinaValue(img.getHeight()));
722709
}
723710
if (drawRightOffsetLine) {
724-
if (isRetinaDisplay() && isChrome()) {
725-
g.drawLine(2 * (xRoot + widthRoot), 0, 2 * (xRoot + widthRoot), 2 * img.getHeight());
726-
} else {
727-
g.drawLine(xRoot + widthRoot, 0, xRoot + widthRoot, img.getHeight());
728-
}
711+
g.drawLine(getRetinaValue(xRoot + widthRoot), 0, getRetinaValue(xRoot + widthRoot), getRetinaValue(img.getHeight()));
729712
}
730713
if (drawTopOffsetLine) {
731-
if (isRetinaDisplay() && isChrome()) {
732-
g.drawLine(0, 2 * yRoot, 2 * img.getWidth(), 2 * yRoot);
733-
} else {
734-
g.drawLine(0, yRoot, img.getWidth(), yRoot);
735-
}
714+
g.drawLine(0, getRetinaValue(yRoot), getRetinaValue(img.getWidth()), getRetinaValue(yRoot));
736715
}
737716
if (drawBottomOffsetLine) {
738-
if (isRetinaDisplay() && isChrome()) {
739-
g.drawLine(0, 2 * (yRoot + heightRoot), 2 * img.getWidth(), 2 * (yRoot + heightRoot));
740-
} else {
741-
g.drawLine(0, yRoot + heightRoot, img.getWidth(), yRoot + heightRoot);
742-
}
717+
g.drawLine(0, getRetinaValue(yRoot + heightRoot), getRetinaValue(img.getWidth()), getRetinaValue(yRoot + heightRoot));
743718
}
744719
}
745720

@@ -751,7 +726,7 @@ void putJsonDetailsWithoutElement(String message) {
751726
errorMessage.add(details);
752727
}
753728

754-
void putJsonDetailsWithElement(String message, WebElement element) {
729+
private void putJsonDetailsWithElement(String message, WebElement element) {
755730
float xContainer = element.getLocation().getX();
756731
float yContainer = element.getLocation().getY();
757732
float widthContainer = element.getSize().getWidth();
@@ -794,6 +769,14 @@ String getFormattedMessage(WebElement element) {
794769
String.valueOf(element.getSize().height));
795770
}
796771

772+
int getRetinaValue(int value) {
773+
if (isRetinaDisplay() && isChrome()) {
774+
return 2 * value;
775+
} else {
776+
return value;
777+
}
778+
}
779+
797780
int getLeftOffset(WebElement element) {
798781
return element.getLocation().x;
799782
}
@@ -810,6 +793,24 @@ int getBottomOffset(WebElement element) {
810793
return pageHeight - (element.getLocation().y + element.getSize().height);
811794
}
812795

796+
long getPageWidth() {
797+
if (!isMobile()) {
798+
JavascriptExecutor executor = (JavascriptExecutor) driver;
799+
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;}");
800+
} else {
801+
return driver.manage().window().getSize().width;
802+
}
803+
}
804+
805+
long getPageHeight() {
806+
if (!isMobile()) {
807+
JavascriptExecutor executor = (JavascriptExecutor) driver;
808+
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;}");
809+
} else {
810+
return driver.manage().window().getSize().height;
811+
}
812+
}
813+
813814
public enum Units {
814815
PX,
815816
PERCENT

src/main/java/util/validator/UIValidator.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ public class UIValidator extends ResponsiveUIValidator implements Validator {
2020
yRoot = rootElement.getLocation().getY();
2121
widthRoot = rootElement.getSize().getWidth();
2222
heightRoot = rootElement.getSize().getHeight();
23-
pageWidth = isRetinaDisplay() && isChrome() ? 2 * driver.manage().window().getSize().getWidth() : driver.manage().window().getSize().getWidth();
24-
pageHeight = isRetinaDisplay() && isChrome() ? 2 * driver.manage().window().getSize().getHeight() : driver.manage().window().getSize().getHeight();
25-
rootElementRightOffset = pageWidth - xRoot + widthRoot;
26-
rootElementBottomOffset = pageHeight - yRoot + heightRoot;
23+
pageWidth = (int) getPageWidth();
24+
pageHeight = (int) getPageHeight();
25+
pageHeight = getRetinaValue(driver.manage().window().getSize().getHeight());
2726
startTime = System.currentTimeMillis();
2827
}
2928

src/test/java/ResponsiveValidatorTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,23 @@ public void testThatResponsiveValidatorWorks() {
4646

4747
softly.assertThat(success1).isEqualTo(true).overridingErrorMessage("Failed validation of Top Slider element");
4848

49-
boolean success0 = uiValidator.init("Validation of Top Slider Element")
49+
boolean success0 = uiValidator.init("Validation of Grid view")
5050
.findElement(page.gridContainer(), "Grid Container")
5151
.equalLeftRightOffset()
5252
.drawMap()
5353
.validate();
5454

5555
softly.assertThat(success0).isEqualTo(true).overridingErrorMessage("Failed validation of Grid Container");
5656

57+
boolean success01 = uiValidator.init("Validation of Main container")
58+
.findElement(page.mainContainer(), "Main Container")
59+
.equalLeftRightOffset()
60+
.drawMap()
61+
.validate();
62+
63+
softly.assertThat(success01).isEqualTo(true).overridingErrorMessage("Failed validation of Main Container");
64+
65+
5766
boolean success2 = uiValidator.init("Validation of Top Text block")
5867
.findElement(page.topTextBlock(), "Top Text block")
5968
.sameOffsetRightAs(page.gridContainer(), "Grid Container")

src/test/java/TestPage.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ public TestPage(WebDriver driver) {
1515
super(driver, 10);
1616
}
1717

18+
public WebElement mainContainer() {
19+
return getWebElement(By.className("container"));
20+
}
21+
1822
public WebElement topSlider() {
1923
return getWebElement(By.className("flexslider"));
2024
}

0 commit comments

Comments
 (0)