Skip to content

Commit 9166303

Browse files
author
Denys Zaiats
committed
[responsive-validator] - added css validation
1 parent c4816a4 commit 9166303

File tree

2 files changed

+148
-26
lines changed

2 files changed

+148
-26
lines changed

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

Lines changed: 128 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package util.validator;
22

3+
import http.helpers.TextFinder;
34
import org.apache.commons.io.FileUtils;
45
import org.apache.log4j.Logger;
56
import org.json.simple.JSONArray;
@@ -8,6 +9,7 @@
89
import org.openqa.selenium.Dimension;
910
import org.openqa.selenium.*;
1011
import org.openqa.selenium.Point;
12+
import util.driver.DriverHelper;
1113
import util.driver.PageValidator;
1214
import util.general.HtmlReportBuilder;
1315
import util.general.SystemHelper;
@@ -143,40 +145,92 @@ public ResponsiveUIValidator notOverlapWith(WebElement element, String readableN
143145
return this;
144146
}
145147

148+
@Override
149+
public ResponsiveUIValidator notOverlapWith(List<WebElement> elements) {
150+
for (WebElement element : elements) {
151+
validateOverlappingWithElements(element, "Element with class name: " + element.getAttribute("class"));
152+
}
153+
return this;
154+
}
155+
146156
@Override
147157
public ResponsiveUIValidator sameOffsetLeftAs(WebElement element, String readableName) {
148158
validateLeftOffsetForElements(element, readableName);
149159
drawLeftOffsetLine = true;
150160
return this;
151161
}
152162

163+
@Override
164+
public ResponsiveUIValidator sameOffsetLeftAs(List<WebElement> elements) {
165+
for (WebElement element : elements) {
166+
validateLeftOffsetForElements(element, "Element with class name: " + element.getAttribute("class"));
167+
}
168+
drawLeftOffsetLine = true;
169+
return this;
170+
}
171+
153172
@Override
154173
public ResponsiveUIValidator sameOffsetRightAs(WebElement element, String readableName) {
155174
validateRightOffsetForElements(element, readableName);
156175
drawRightOffsetLine = true;
157176
return this;
158177
}
159178

179+
@Override
180+
public ResponsiveUIValidator sameOffsetRightAs(List<WebElement> elements) {
181+
for (WebElement element : elements) {
182+
validateRightOffsetForElements(element, "Element with class name: " + element.getAttribute("class"));
183+
}
184+
drawRightOffsetLine = true;
185+
return this;
186+
}
187+
160188
@Override
161189
public ResponsiveUIValidator sameOffsetTopAs(WebElement element, String readableName) {
162190
validateTopOffsetForElements(element, readableName);
163191
drawTopOffsetLine = true;
164192
return this;
165193
}
166194

195+
@Override
196+
public ResponsiveUIValidator sameOffsetTopAs(List<WebElement> elements) {
197+
for (WebElement element : elements) {
198+
validateTopOffsetForElements(element, "Element with class name: " + element.getAttribute("class"));
199+
}
200+
drawTopOffsetLine = true;
201+
return this;
202+
}
203+
167204
@Override
168205
public ResponsiveUIValidator sameOffsetBottomAs(WebElement element, String readableName) {
169206
validateBottomOffsetForElements(element, readableName);
170207
drawBottomOffsetLine = true;
171208
return this;
172209
}
173210

211+
@Override
212+
public ResponsiveUIValidator sameOffsetBottomAs(List<WebElement> elements) {
213+
for (WebElement element : elements) {
214+
validateBottomOffsetForElements(element, "Element with class name: " + element.getAttribute("class"));
215+
}
216+
drawBottomOffsetLine = true;
217+
return this;
218+
}
219+
174220
@Override
175221
public ResponsiveUIValidator sameWidthAs(WebElement element, String readableName) {
176222
validateSameWidth(element, readableName);
177223
return this;
178224
}
179225

226+
@Override
227+
public ResponsiveUIValidator sameWidthAs(List<WebElement> elements) {
228+
for (WebElement element : elements) {
229+
validateSameWidth(element, "Element with class name: " + element.getAttribute("class"));
230+
}
231+
return this;
232+
}
233+
180234
@Override
181235
public ResponsiveUIValidator minWidth(int width) {
182236
validateMinWidth(getInt(width, true));
@@ -202,6 +256,14 @@ public ResponsiveUIValidator sameHeightAs(WebElement element, String readableNam
202256
return this;
203257
}
204258

259+
@Override
260+
public ResponsiveUIValidator sameHeightAs(List<WebElement> elements) {
261+
for (WebElement element : elements) {
262+
validateSameHeight(element, "Element with class name: " + element.getAttribute("class"));
263+
}
264+
return this;
265+
}
266+
205267
@Override
206268
public ResponsiveUIValidator minHeight(int height) {
207269
validateMinHeight(getInt(height, false));
@@ -220,6 +282,14 @@ public ResponsiveUIValidator sameSizeAs(WebElement element, String readableName)
220282
return this;
221283
}
222284

285+
@Override
286+
public ResponsiveUIValidator sameSizeAs(List<WebElement> elements) {
287+
for (WebElement element : elements) {
288+
validateSameSize(element, "Element with class name: " + element.getAttribute("class"));
289+
}
290+
return this;
291+
}
292+
223293
@Override
224294
public ResponsiveUIValidator heightBetween(int min, int max) {
225295
validateMinHeight(getInt(min, false));
@@ -243,6 +313,22 @@ public ResponsiveUIValidator maxOffset(int top, int right, int bottom, int left)
243313
return this;
244314
}
245315

316+
@Override
317+
public ResponsiveUIValidator withCssValue(String cssProperty, String... args) {
318+
String cssValue = rootElement.getCssValue(cssProperty);
319+
320+
if (!cssValue.equals("")) {
321+
for (String val : args) {
322+
if (!TextFinder.textIsFound(val, cssValue)) {
323+
putJsonDetailsWithoutElement(String.format("Expected value of '%s' is '%s'. Actual is '%s'", cssProperty, val, cssValue));
324+
}
325+
}
326+
}else{
327+
putJsonDetailsWithoutElement(String.format("Element '%s' does not have css property '%s'", rootElementReadableName, cssProperty));
328+
}
329+
return this;
330+
}
331+
246332
@Override
247333
public ResponsiveUIValidator drawMap() {
248334
withReport = true;
@@ -284,7 +370,7 @@ public boolean validate() {
284370
try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(TARGET_AUTOMOTION_JSON + rootElementReadableName.replace(" ", "") + "-automotion" + ms + ".json"), StandardCharsets.UTF_8))) {
285371
writer.write(jsonResults.toJSONString());
286372
} catch (IOException ex) {
287-
LOG.error("Cannot create html report: " + ex.getMessage());
373+
LOG.error("Cannot create json report: " + ex.getMessage());
288374
}
289375
try {
290376
File file = new File(TARGET_AUTOMOTION_JSON + rootElementReadableName.replace(" ", "") + "-automotion" + ms + ".json");
@@ -356,32 +442,42 @@ private void drawScreenshot() {
356442
}
357443

358444
private void validateRightOffsetForElements(WebElement element, String readableName) {
359-
if (!elementsHasEqualLeftRightOffset(false, element)) {
360-
putJsonDetailsWithElement(String.format("Element '%s' has not the same right offset as element '%s'", rootElementReadableName, readableName), element);
445+
if (!element.equals(rootElement)) {
446+
if (!elementsHasEqualLeftRightOffset(false, element)) {
447+
putJsonDetailsWithElement(String.format("Element '%s' has not the same right offset as element '%s'", rootElementReadableName, readableName), element);
448+
}
361449
}
362450
}
363451

364452
private void validateLeftOffsetForElements(WebElement element, String readableName) {
365-
if (!elementsHasEqualLeftRightOffset(true, element)) {
366-
putJsonDetailsWithElement(String.format("Element '%s' has not the same left offset as element '%s'", rootElementReadableName, readableName), element);
453+
if (!element.equals(rootElement)) {
454+
if (!elementsHasEqualLeftRightOffset(true, element)) {
455+
putJsonDetailsWithElement(String.format("Element '%s' has not the same left offset as element '%s'", rootElementReadableName, readableName), element);
456+
}
367457
}
368458
}
369459

370460
private void validateTopOffsetForElements(WebElement element, String readableName) {
371-
if (!elementsHasEqualTopBottomOffset(true, element)) {
372-
putJsonDetailsWithElement(String.format("Element '%s' has not the same top offset as element '%s'", rootElementReadableName, readableName), element);
461+
if (!element.equals(rootElement)) {
462+
if (!elementsHasEqualTopBottomOffset(true, element)) {
463+
putJsonDetailsWithElement(String.format("Element '%s' has not the same top offset as element '%s'", rootElementReadableName, readableName), element);
464+
}
373465
}
374466
}
375467

376468
private void validateBottomOffsetForElements(WebElement element, String readableName) {
377-
if (!elementsHasEqualTopBottomOffset(false, element)) {
378-
putJsonDetailsWithElement(String.format("Element '%s' has not the same bottom offset as element '%s'", rootElementReadableName, readableName), element);
469+
if (!element.equals(rootElement)) {
470+
if (!elementsHasEqualTopBottomOffset(false, element)) {
471+
putJsonDetailsWithElement(String.format("Element '%s' has not the same bottom offset as element '%s'", rootElementReadableName, readableName), element);
472+
}
379473
}
380474
}
381475

382476
private void validateOverlappingWithElements(WebElement element, String readableName) {
383-
if (elementsAreOverlapped(element)) {
384-
putJsonDetailsWithElement(String.format("Element '%s' is overlapped with element '%s' but should not", rootElementReadableName, readableName), element);
477+
if (!element.equals(rootElement)) {
478+
if (elementsAreOverlapped(element)) {
479+
putJsonDetailsWithElement(String.format("Element '%s' is overlapped with element '%s' but should not", rootElementReadableName, readableName), element);
480+
}
385481
}
386482
}
387483

@@ -428,9 +524,11 @@ private void validateMinHeight(int height) {
428524
}
429525

430526
private void validateSameHeight(WebElement element, String readableName) {
431-
int h = element.getSize().getHeight();
432-
if (h != heightRoot) {
433-
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);
527+
if (!element.equals(rootElement)) {
528+
int h = element.getSize().getHeight();
529+
if (h != heightRoot) {
530+
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);
531+
}
434532
}
435533
}
436534

@@ -447,17 +545,21 @@ private void validateMinWidth(int width) {
447545
}
448546

449547
private void validateSameWidth(WebElement element, String readableName) {
450-
int w = element.getSize().getWidth();
451-
if (w != widthRoot) {
452-
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);
548+
if (!element.equals(rootElement)) {
549+
int w = element.getSize().getWidth();
550+
if (w != widthRoot) {
551+
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);
552+
}
453553
}
454554
}
455555

456556
private void validateSameSize(WebElement element, String readableName) {
457-
int h = element.getSize().getHeight();
458-
int w = element.getSize().getWidth();
459-
if (h != heightRoot || w != widthRoot) {
460-
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);
557+
if (!element.equals(rootElement)) {
558+
int h = element.getSize().getHeight();
559+
int w = element.getSize().getWidth();
560+
if (h != heightRoot || w != widthRoot) {
561+
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);
562+
}
461563
}
462564
}
463565

@@ -645,13 +747,13 @@ private void putJsonDetailsWithElement(String message, WebElement element) {
645747
errorMessage.add(details);
646748
}
647749

648-
private int getInt(int i, boolean horizontal){
649-
if (units.equals(PX)){
750+
private int getInt(int i, boolean horizontal) {
751+
if (units.equals(PX)) {
650752
return i;
651-
}else{
652-
if (horizontal){
753+
} else {
754+
if (horizontal) {
653755
return (i * pageWidth) / 100;
654-
}else{
756+
} else {
655757
return (i * pageHeight) / 100;
656758
}
657759
}

src/main/java/util/validator/Validator.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.openqa.selenium.WebElement;
44

5+
import java.util.List;
6+
57
interface Validator {
68
ResponsiveUIValidator init();
79

@@ -29,16 +31,28 @@ interface Validator {
2931

3032
ResponsiveUIValidator notOverlapWith(WebElement element, String readableName);
3133

34+
ResponsiveUIValidator notOverlapWith(List<WebElement> elements);
35+
3236
ResponsiveUIValidator sameOffsetLeftAs(WebElement element, String readableName);
3337

38+
ResponsiveUIValidator sameOffsetLeftAs(List<WebElement> elements);
39+
3440
ResponsiveUIValidator sameOffsetRightAs(WebElement element, String readableName);
3541

42+
ResponsiveUIValidator sameOffsetRightAs(List<WebElement> elements);
43+
3644
ResponsiveUIValidator sameOffsetTopAs(WebElement element, String readableName);
3745

46+
ResponsiveUIValidator sameOffsetTopAs(List<WebElement> elements);
47+
3848
ResponsiveUIValidator sameOffsetBottomAs(WebElement element, String readableName);
3949

50+
ResponsiveUIValidator sameOffsetBottomAs(List<WebElement> elements);
51+
4052
ResponsiveUIValidator sameWidthAs(WebElement element, String readableName);
4153

54+
ResponsiveUIValidator sameWidthAs(List<WebElement> elements);
55+
4256
ResponsiveUIValidator minWidth(int width);
4357

4458
ResponsiveUIValidator maxWidth(int width);
@@ -47,18 +61,24 @@ interface Validator {
4761

4862
ResponsiveUIValidator sameHeightAs(WebElement element, String readableName);
4963

64+
ResponsiveUIValidator sameHeightAs(List<WebElement> elements);
65+
5066
ResponsiveUIValidator minHeight(int height);
5167

5268
ResponsiveUIValidator maxHeight(int height);
5369

5470
ResponsiveUIValidator sameSizeAs(WebElement element, String readableName);
5571

72+
ResponsiveUIValidator sameSizeAs(List<WebElement> elements);
73+
5674
ResponsiveUIValidator heightBetween(int min, int max);
5775

5876
ResponsiveUIValidator minOffset(int top, int right, int bottom, int left);
5977

6078
ResponsiveUIValidator maxOffset(int top, int right, int bottom, int left);
6179

80+
ResponsiveUIValidator withCssValue(String cssProperty, String... args);
81+
6282
ResponsiveUIValidator drawMap();
6383

6484
boolean validate();

0 commit comments

Comments
 (0)