Skip to content

Commit 3de6289

Browse files
committed
[1.4.2-update-error-messages] - updated error messages. Added new methods for validation of equality for offsets.
1 parent 167c3b8 commit 3de6289

File tree

6 files changed

+162
-42
lines changed

6 files changed

+162
-42
lines changed

src/main/java/util/validator/ChunkValidator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,8 @@ public interface ChunkValidator {
2424

2525
ResponsiveUIChunkValidator sameBottomOffset();
2626

27+
ResponsiveUIChunkValidator equalLeftRightOffset();
28+
29+
ResponsiveUIChunkValidator equalTopBottomOffset();
30+
2731
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55

66
import java.util.List;
77

8+
import static environment.EnvironmentFactory.isChrome;
9+
import static util.general.SystemHelper.isRetinaDisplay;
10+
811
public class ResponsiveUIChunkValidator extends ResponsiveUIValidator implements ChunkValidator {
912

1013
ResponsiveUIChunkValidator(WebDriver driver, List<WebElement> elements) {
1114
super(driver);
1215
rootElements = elements;
13-
pageWidth = driver.manage().window().getSize().getWidth();
14-
pageHeight = driver.manage().window().getSize().getHeight();
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();
1518
rootElement = rootElements.get(0);
1619
startTime = System.currentTimeMillis();
1720
}
@@ -81,4 +84,16 @@ public ResponsiveUIChunkValidator sameBottomOffset() {
8184
validateBottomOffsetForChunk(rootElements);
8285
return this;
8386
}
87+
88+
@Override
89+
public ResponsiveUIChunkValidator equalLeftRightOffset() {
90+
validateEqualLeftRightOffset(rootElements);
91+
return this;
92+
}
93+
94+
@Override
95+
public ResponsiveUIChunkValidator equalTopBottomOffset() {
96+
validateEqualTopBottomOffset(rootElements);
97+
return this;
98+
}
8499
}

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

Lines changed: 98 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import static environment.EnvironmentFactory.isChrome;
2727
import static util.general.SystemHelper.isAutomotionFolderExists;
28+
import static util.general.SystemHelper.isRetinaDisplay;
2829
import static util.validator.Constants.*;
2930
import static util.validator.ResponsiveUIValidator.Units.PX;
3031

@@ -37,8 +38,8 @@ public class ResponsiveUIValidator {
3738
static long startTime;
3839
private static boolean withReport = false;
3940
private static String scenarioName = "Default";
40-
private static Color rootColor = Color.RED;
41-
private static Color highlightedElementsColor = Color.MAGENTA;
41+
private static Color rootColor = new Color(255, 0, 0, 255);
42+
private static Color highlightedElementsColor = new Color(255, 0, 255, 255);
4243
private static Color linesColor = Color.ORANGE;
4344
private static File screenshot;
4445
private static BufferedImage img;
@@ -205,10 +206,12 @@ void drawScreenshot() {
205206

206207
g.setColor(highlightedElementsColor);
207208
g.setStroke(new BasicStroke(2));
208-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
209+
if (isRetinaDisplay() && isChrome()) {
209210
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);
210212
} else {
211213
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);
212215
}
213216
}
214217
}
@@ -269,63 +272,63 @@ void validateGridAlignment(int columns, int rows) {
269272

270273
void validateRightOffsetForChunk(List<WebElement> elements) {
271274
for (int i = 0; i < elements.size() - 1; i++) {
272-
if (!elementsHasEqualLeftRightOffset(false, elements.get(i), elements.get(i + 1))) {
275+
if (!elementsHaveEqualLeftRightOffset(false, elements.get(i), elements.get(i + 1))) {
273276
putJsonDetailsWithElement("Element #" + (i + 1) + " has not the same right offset as element #" + (i + 2) + "", elements.get(i + 1));
274277
}
275278
}
276279
}
277280

278281
void validateLeftOffsetForChunk(List<WebElement> elements) {
279282
for (int i = 0; i < elements.size() - 1; i++) {
280-
if (!elementsHasEqualLeftRightOffset(true, elements.get(i), elements.get(i + 1))) {
283+
if (!elementsHaveEqualLeftRightOffset(true, elements.get(i), elements.get(i + 1))) {
281284
putJsonDetailsWithElement("Element #" + (i + 1) + " has not the same left offset as element #" + (i + 2) + "", elements.get(i + 1));
282285
}
283286
}
284287
}
285288

286289
void validateTopOffsetForChunk(List<WebElement> elements) {
287290
for (int i = 0; i < elements.size() - 1; i++) {
288-
if (!elementsHasEqualTopBottomOffset(true, elements.get(i), elements.get(i + 1))) {
291+
if (!elementsHaveEqualTopBottomOffset(true, elements.get(i), elements.get(i + 1))) {
289292
putJsonDetailsWithElement("Element #" + (i + 1) + " has not the same top offset as element #" + (i + 2) + "", elements.get(i + 1));
290293
}
291294
}
292295
}
293296

294297
void validateBottomOffsetForChunk(List<WebElement> elements) {
295298
for (int i = 0; i < elements.size() - 1; i++) {
296-
if (!elementsHasEqualTopBottomOffset(false, elements.get(i), elements.get(i + 1))) {
299+
if (!elementsHaveEqualTopBottomOffset(false, elements.get(i), elements.get(i + 1))) {
297300
putJsonDetailsWithElement("Element #" + (i + 1) + " has not the same bottom offset as element #" + (i + 2) + "", elements.get(i + 1));
298301
}
299302
}
300303
}
301304

302305
void validateRightOffsetForElements(WebElement element, String readableName) {
303306
if (!element.equals(rootElement)) {
304-
if (!elementsHasEqualLeftRightOffset(false, element)) {
307+
if (!elementsHaveEqualLeftRightOffset(false, element)) {
305308
putJsonDetailsWithElement(String.format("Element '%s' has not the same right offset as element '%s'", rootElementReadableName, readableName), element);
306309
}
307310
}
308311
}
309312

310313
void validateLeftOffsetForElements(WebElement element, String readableName) {
311314
if (!element.equals(rootElement)) {
312-
if (!elementsHasEqualLeftRightOffset(true, element)) {
315+
if (!elementsHaveEqualLeftRightOffset(true, element)) {
313316
putJsonDetailsWithElement(String.format("Element '%s' has not the same left offset as element '%s'", rootElementReadableName, readableName), element);
314317
}
315318
}
316319
}
317320

318321
void validateTopOffsetForElements(WebElement element, String readableName) {
319322
if (!element.equals(rootElement)) {
320-
if (!elementsHasEqualTopBottomOffset(true, element)) {
323+
if (!elementsHaveEqualTopBottomOffset(true, element)) {
321324
putJsonDetailsWithElement(String.format("Element '%s' has not the same top offset as element '%s'", rootElementReadableName, readableName), element);
322325
}
323326
}
324327
}
325328

326329
void validateBottomOffsetForElements(WebElement element, String readableName) {
327330
if (!element.equals(rootElement)) {
328-
if (!elementsHasEqualTopBottomOffset(false, element)) {
331+
if (!elementsHaveEqualTopBottomOffset(false, element)) {
329332
putJsonDetailsWithElement(String.format("Element '%s' has not the same bottom offset as element '%s'", rootElementReadableName, readableName), element);
330333
}
331334
}
@@ -393,7 +396,7 @@ void validateSameHeight(WebElement element, String readableName) {
393396
if (!element.equals(rootElement)) {
394397
int h = element.getSize().getHeight();
395398
if (h != heightRoot) {
396-
putJsonDetailsWithElement(String.format("Element '%s' has not the same height as '%s'. Height of '%s' is %spx. Height of '%s' is %spx", rootElementReadableName, readableName, rootElementReadableName, heightRoot, readableName, h), element);
399+
putJsonDetailsWithElement(String.format("Element '%s' has not the same height as %s. Height of '%s' is %spx. Height of element is %spx", rootElementReadableName, readableName, rootElementReadableName, heightRoot, h), element);
397400
}
398401
}
399402
}
@@ -414,7 +417,7 @@ void validateSameWidth(WebElement element, String readableName) {
414417
if (!element.equals(rootElement)) {
415418
int w = element.getSize().getWidth();
416419
if (w != widthRoot) {
417-
putJsonDetailsWithElement(String.format("Element '%s' has not the same width as '%s'. Width of '%s' is %spx. Width of '%s' is %spx", rootElementReadableName, readableName, rootElementReadableName, widthRoot, readableName, w), element);
420+
putJsonDetailsWithElement(String.format("Element '%s' has not the same width as %s. Width of '%s' is %spx. Width of element is %spx", rootElementReadableName, readableName, rootElementReadableName, widthRoot, w), element);
418421
}
419422
}
420423
}
@@ -424,7 +427,7 @@ void validateSameSize(WebElement element, String readableName) {
424427
int h = element.getSize().getHeight();
425428
int w = element.getSize().getWidth();
426429
if (h != heightRoot || w != widthRoot) {
427-
putJsonDetailsWithElement(String.format("Element '%s' has not the same size as '%s'. Size of '%s' is %spx x %spx. Size of '%s' is %spx x %spx", rootElementReadableName, readableName, rootElementReadableName, widthRoot, heightRoot, readableName, w, h), element);
430+
putJsonDetailsWithElement(String.format("Element '%s' has not the same size as %s. Size of '%s' is %spx x %spx. Size of element is %spx x %spx", rootElementReadableName, readableName, rootElementReadableName, widthRoot, heightRoot, w, h), element);
428431
}
429432
}
430433
}
@@ -438,20 +441,20 @@ void validateSameSize(List<WebElement> elements, int type) {
438441
switch (type) {
439442
case 0:
440443
if (h1 != h2 || w1 != w2) {
441-
putJsonDetailsWithElement("Element #" + (i + 1) + " has different size.", elements.get(i));
442-
putJsonDetailsWithElement("Element #" + (i + 2) + " has different size.", elements.get(i + 1));
444+
putJsonDetailsWithElement(String.format("Element #%d has different size. Element size is: [%d, %d]", (i + 1), elements.get(i).getSize().width, elements.get(i).getSize().height), elements.get(i));
445+
putJsonDetailsWithElement(String.format("Element #%d has different size. Element size is: [%d, %d]", (i + 2), elements.get(i + 1).getSize().width, elements.get(i + 1).getSize().height), elements.get(i + 1));
443446
}
444447
break;
445448
case 1:
446449
if (w1 != w2) {
447-
putJsonDetailsWithElement("Element #" + (i + 1) + " has different width.", elements.get(i));
448-
putJsonDetailsWithElement("Element #" + (i + 2) + " has different width.", elements.get(i + 1));
450+
putJsonDetailsWithElement(String.format("Element #%d has different width. Element width is: [%d, %d]", (i + 1), elements.get(i).getSize().width, elements.get(i).getSize().height), elements.get(i));
451+
putJsonDetailsWithElement(String.format("Element #%d has different width. Element width is: [%d, %d]", (i + 2), elements.get(i + 1).getSize().width, elements.get(i + 1).getSize().height), elements.get(i + 1));
449452
}
450453
break;
451454
case 2:
452455
if (h1 != h2) {
453-
putJsonDetailsWithElement("Element #" + (i + 1) + " has different height.", elements.get(i));
454-
putJsonDetailsWithElement("Element #" + (i + 2) + " has different height.", elements.get(i + 1));
456+
putJsonDetailsWithElement(String.format("Element #%d has different height. Element height is: [%d, %d]", (i + 1), elements.get(i).getSize().width, elements.get(i).getSize().height), elements.get(i));
457+
putJsonDetailsWithElement(String.format("Element #%d has different height. Element height is: [%d, %d]", (i + 2), elements.get(i + 1).getSize().width, elements.get(i + 1).getSize().height), elements.get(i + 1));
455458
}
456459
}
457460
}
@@ -611,7 +614,7 @@ boolean elementsAreOverlapped(WebElement rootElement, WebElement elementOverlapW
611614
|| elementsAreOverlappedOnBorder(rootElement, elementOverlapWith);
612615
}
613616

614-
boolean elementsHasEqualLeftRightOffset(boolean isLeft, WebElement elementToCompare) {
617+
boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement elementToCompare) {
615618
Point elLoc = elementToCompare.getLocation();
616619
Dimension elSize = elementToCompare.getSize();
617620

@@ -622,7 +625,7 @@ boolean elementsHasEqualLeftRightOffset(boolean isLeft, WebElement elementToComp
622625
}
623626
}
624627

625-
boolean elementsHasEqualLeftRightOffset(boolean isLeft, WebElement element, WebElement elementToCompare) {
628+
boolean elementsHaveEqualLeftRightOffset(boolean isLeft, WebElement element, WebElement elementToCompare) {
626629
Point elLoc = elementToCompare.getLocation();
627630
Dimension elSize = elementToCompare.getSize();
628631
int xRoot = element.getLocation().x;
@@ -636,7 +639,7 @@ boolean elementsHasEqualLeftRightOffset(boolean isLeft, WebElement element, WebE
636639
}
637640

638641

639-
boolean elementsHasEqualTopBottomOffset(boolean isTop, WebElement elementToCompare) {
642+
boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement elementToCompare) {
640643
Point elLoc = elementToCompare.getLocation();
641644
Dimension elSize = elementToCompare.getSize();
642645

@@ -647,7 +650,7 @@ boolean elementsHasEqualTopBottomOffset(boolean isTop, WebElement elementToCompa
647650
}
648651
}
649652

650-
boolean elementsHasEqualTopBottomOffset(boolean isTop, WebElement element, WebElement elementToCompare) {
653+
boolean elementsHaveEqualTopBottomOffset(boolean isTop, WebElement element, WebElement elementToCompare) {
651654
Point elLoc = elementToCompare.getLocation();
652655
Dimension elSize = elementToCompare.getSize();
653656
int yRoot = element.getLocation().y;
@@ -660,41 +663,79 @@ boolean elementsHasEqualTopBottomOffset(boolean isTop, WebElement element, WebEl
660663
}
661664
}
662665

666+
void validateEqualLeftRightOffset(WebElement element, String rootElementReadableName){
667+
if (!elementHasEqualLeftRightOffset(element)){
668+
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);
669+
}
670+
}
671+
672+
void validateEqualTopBottomOffset(WebElement element, String rootElementReadableName){
673+
if (!elementHasEqualTopBottomOffset(element)){
674+
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);
675+
}
676+
}
677+
678+
void validateEqualLeftRightOffset(List<WebElement> elements){
679+
for (WebElement element: elements) {
680+
if (!elementHasEqualLeftRightOffset(element)) {
681+
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);
682+
}
683+
}
684+
}
685+
686+
void validateEqualTopBottomOffset(List<WebElement> elements){
687+
for (WebElement element: elements) {
688+
if (!elementHasEqualTopBottomOffset(element)) {
689+
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);
690+
}
691+
}
692+
}
693+
694+
boolean elementHasEqualLeftRightOffset(WebElement element) {
695+
return getLeftOffset(element) == getRightOffset(element);
696+
}
697+
698+
boolean elementHasEqualTopBottomOffset(WebElement element) {
699+
return getTopOffset(element) == getBottomOffset(element);
700+
}
701+
663702
void drawRoot(Color color) {
664703
g.setColor(color);
665704
g.setStroke(new BasicStroke(2));
666-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
705+
if (isRetinaDisplay() && isChrome()) {
667706
g.drawRect(2 * xRoot, 2 * yRoot, 2 * widthRoot, 2 * heightRoot);
707+
//g.fillRect(2 * xRoot, 2 * yRoot, 2 * widthRoot, 2 * heightRoot);
668708
} else {
669709
g.drawRect(xRoot, yRoot, widthRoot, heightRoot);
710+
//g.fillRect(xRoot, yRoot, widthRoot, heightRoot);
670711
}
671712

672713
Stroke dashed = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
673714
g.setStroke(dashed);
674715
g.setColor(linesColor);
675716
if (drawLeftOffsetLine) {
676-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
717+
if (isRetinaDisplay() && isChrome()) {
677718
g.drawLine(2 * xRoot, 0, 2 * xRoot, 2 * img.getHeight());
678719
} else {
679720
g.drawLine(xRoot, 0, xRoot, img.getHeight());
680721
}
681722
}
682723
if (drawRightOffsetLine) {
683-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
724+
if (isRetinaDisplay() && isChrome()) {
684725
g.drawLine(2 * (xRoot + widthRoot), 0, 2 * (xRoot + widthRoot), 2 * img.getHeight());
685726
} else {
686727
g.drawLine(xRoot + widthRoot, 0, xRoot + widthRoot, img.getHeight());
687728
}
688729
}
689730
if (drawTopOffsetLine) {
690-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
731+
if (isRetinaDisplay() && isChrome()) {
691732
g.drawLine(0, 2 * yRoot, 2 * img.getWidth(), 2 * yRoot);
692733
} else {
693734
g.drawLine(0, yRoot, img.getWidth(), yRoot);
694735
}
695736
}
696737
if (drawBottomOffsetLine) {
697-
if (SystemHelper.isRetinaDisplay() && isChrome()) {
738+
if (isRetinaDisplay() && isChrome()) {
698739
g.drawLine(0, 2 * (yRoot + heightRoot), 2 * img.getWidth(), 2 * (yRoot + heightRoot));
699740
} else {
700741
g.drawLine(0, yRoot + heightRoot, img.getWidth(), yRoot + heightRoot);
@@ -741,6 +782,34 @@ int getInt(int i, boolean horizontal) {
741782
}
742783
}
743784

785+
String getFormattedMessage(WebElement element) {
786+
return String.format("with properties: tag='%s', id='%s', class='%s', text='%s', coord=[%s,%s], size=[%s,%s]",
787+
element.getTagName(),
788+
element.getAttribute("id"),
789+
element.getAttribute("class"),
790+
element.getText().length() < 10 ? element.getText() : element.getText().substring(0, 10) + "...",
791+
String.valueOf(element.getLocation().x),
792+
String.valueOf(element.getLocation().y),
793+
String.valueOf(element.getSize().width),
794+
String.valueOf(element.getSize().height));
795+
}
796+
797+
int getLeftOffset(WebElement element) {
798+
return element.getLocation().x;
799+
}
800+
801+
int getRightOffset(WebElement element) {
802+
return pageWidth - (element.getLocation().x + element.getSize().width);
803+
}
804+
805+
int getTopOffset(WebElement element) {
806+
return element.getLocation().y;
807+
}
808+
809+
int getBottomOffset(WebElement element) {
810+
return pageHeight - (element.getLocation().y + element.getSize().height);
811+
}
812+
744813
public enum Units {
745814
PX,
746815
PERCENT

0 commit comments

Comments
 (0)