Skip to content

Commit 6ce4132

Browse files
committed
Implement visualization classes and tests
Fixed typo in enum ElementsCount MORE_THAN_ZERO Add selenium/chromedriver issue workaround
1 parent d157bd0 commit 6ce4132

File tree

17 files changed

+120
-15
lines changed

17 files changed

+120
-15
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ downloads
55
# Log file
66
*.log
77

8+
# Visualization files
9+
visualDumps/
10+
811
# BlueJ files
912
*.ctxt
1013

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
<dependency>
8282
<groupId>com.github.aquality-automation</groupId>
8383
<artifactId>aquality-selenium-core</artifactId>
84-
<version>2.0.6</version>
84+
<version>3.0.0</version>
8585
</dependency>
8686

8787
<dependency>

src/main/java/aquality/selenium/configuration/Configuration.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import aquality.selenium.core.configurations.IElementCacheConfiguration;
44
import aquality.selenium.core.configurations.ILoggerConfiguration;
55
import aquality.selenium.core.configurations.IRetryConfiguration;
6+
import aquality.selenium.core.configurations.IVisualizationConfiguration;
67
import com.google.inject.Inject;
78

89
public class Configuration implements IConfiguration {
@@ -12,16 +13,18 @@ public class Configuration implements IConfiguration {
1213
private final IBrowserProfile browserProfile;
1314
private final ILoggerConfiguration loggerConfiguration;
1415
private final IElementCacheConfiguration elementCacheConfiguration;
16+
private final IVisualizationConfiguration visualizationConfiguration;
1517

1618
@Inject
1719
public Configuration(ITimeoutConfiguration timeoutConfiguration, IRetryConfiguration retryConfiguration,
1820
IBrowserProfile browserProfile, ILoggerConfiguration loggerConfiguration,
19-
IElementCacheConfiguration elementCacheConfiguration) {
21+
IElementCacheConfiguration elementCacheConfiguration, IVisualizationConfiguration visualizationConfiguration) {
2022
this.timeoutConfiguration = timeoutConfiguration;
2123
this.retryConfiguration = retryConfiguration;
2224
this.browserProfile = browserProfile;
2325
this.loggerConfiguration = loggerConfiguration;
2426
this.elementCacheConfiguration = elementCacheConfiguration;
27+
this.visualizationConfiguration = visualizationConfiguration;
2528
}
2629

2730
@Override
@@ -48,4 +51,9 @@ public ILoggerConfiguration getLoggerConfiguration() {
4851
public IElementCacheConfiguration getElementCacheConfiguration() {
4952
return elementCacheConfiguration;
5053
}
54+
55+
@Override
56+
public IVisualizationConfiguration getVisualizationConfiguration() {
57+
return visualizationConfiguration;
58+
}
5159
}

src/main/java/aquality/selenium/configuration/IConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import aquality.selenium.core.configurations.IElementCacheConfiguration;
44
import aquality.selenium.core.configurations.ILoggerConfiguration;
55
import aquality.selenium.core.configurations.IRetryConfiguration;
6+
import aquality.selenium.core.configurations.IVisualizationConfiguration;
67

78
/**
89
* Describes tool configuration.
@@ -43,4 +44,11 @@ public interface IConfiguration {
4344
* @return Configuration of element caching.
4445
*/
4546
IElementCacheConfiguration getElementCacheConfiguration();
47+
48+
/**
49+
* Gets configuration of VisualStateProvider and Dump manager.
50+
*
51+
* @return Visualization configuration.
52+
*/
53+
IVisualizationConfiguration getVisualizationConfiguration();
4654
}

src/main/java/aquality/selenium/configuration/driversettings/ChromeSettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ private void setChromeArgs(ChromeOptions options) {
4242
for (String arg : getBrowserStartArguments()) {
4343
options.addArguments(arg);
4444
}
45+
// workaround for Selenium issue https://github.com/SeleniumHQ/selenium/issues/11750
46+
final String allowOriginsArgument = "--remote-allow-origins=*";
47+
if (!getBrowserStartArguments().contains(allowOriginsArgument)) {
48+
options.addArguments(allowOriginsArgument);
49+
}
4550
}
4651

4752
@Override

src/main/java/aquality/selenium/elements/Element.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import aquality.selenium.core.localization.ILocalizationManager;
1313
import aquality.selenium.core.localization.ILocalizedLogger;
1414
import aquality.selenium.core.utilities.IElementActionRetrier;
15+
import aquality.selenium.core.visualization.IImageComparator;
1516
import aquality.selenium.core.waitings.IConditionalWait;
1617
import aquality.selenium.elements.actions.JsActions;
1718
import aquality.selenium.elements.actions.MouseActions;
@@ -64,6 +65,11 @@ void setElementFinder(IElementFinder elementFinder) {
6465
this.elementFinder = elementFinder;
6566
}
6667

68+
@Override
69+
protected IImageComparator getImageComparator() {
70+
return AqualityServices.get(IImageComparator.class);
71+
}
72+
6773
@Override
6874
protected IElementCacheConfiguration getElementCacheConfiguration() {
6975
return AqualityServices.get(IElementCacheConfiguration.class);
@@ -79,6 +85,7 @@ protected ILocalizedLogger getLocalizedLogger() {
7985
return AqualityServices.getLocalizedLogger();
8086
}
8187

88+
@Override
8289
protected ILocalizationManager getLocalizationManager() {
8390
return AqualityServices.get(ILocalizationManager.class);
8491
}

src/main/java/aquality/selenium/elements/ElementStateProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import aquality.selenium.core.elements.DefaultElementStateProvider;
44
import aquality.selenium.core.elements.interfaces.IElementFinder;
5-
import aquality.selenium.core.elements.interfaces.ILogElementState;
5+
import aquality.selenium.core.logging.ILogElementState;
66
import aquality.selenium.core.waitings.IConditionalWait;
77
import org.openqa.selenium.By;
88
import org.openqa.selenium.WebElement;

src/main/java/aquality/selenium/forms/Form.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
11
package aquality.selenium.forms;
22

33
import aquality.selenium.browser.AqualityServices;
4+
import aquality.selenium.core.configurations.IVisualizationConfiguration;
45
import aquality.selenium.core.elements.interfaces.IElementStateProvider;
56
import aquality.selenium.core.localization.ILocalizedLogger;
7+
import aquality.selenium.elements.interfaces.IElement;
68
import aquality.selenium.elements.interfaces.IElementFactory;
79
import aquality.selenium.elements.interfaces.ILabel;
810
import org.openqa.selenium.By;
9-
import org.openqa.selenium.Dimension;
11+
12+
import java.awt.*;
1013

1114
/**
1215
* Defines base class for any UI form.
1316
*/
14-
public abstract class Form {
17+
public abstract class Form extends aquality.selenium.core.forms.Form<IElement> {
18+
/**
19+
* Label of form element defined by its locator and name.
20+
*/
21+
private final ILabel formLabel;
1522
/**
1623
* Locator for specified form
1724
*/
@@ -25,8 +32,10 @@ public abstract class Form {
2532
* Constructor with parameters
2633
*/
2734
protected Form(By locator, String name) {
35+
super(IElement.class);
2836
this.locator = locator;
2937
this.name = name;
38+
formLabel = getElementFactory().getLabel(locator, name);
3039
}
3140

3241
/**
@@ -83,7 +92,7 @@ public void scrollBy(int x, int y) {
8392
* @return Size of the form element.
8493
*/
8594
public Dimension getSize() {
86-
return getFormLabel().getElement().getSize();
95+
return getFormLabel().visual().getSize();
8796
}
8897

8998

@@ -94,7 +103,7 @@ public Dimension getSize() {
94103
* @return Label of form element.
95104
*/
96105
protected ILabel getFormLabel() {
97-
return getElementFactory().getLabel(locator, name);
106+
return formLabel;
98107
}
99108

100109
/**
@@ -111,7 +120,18 @@ protected IElementFactory getElementFactory() {
111120
*
112121
* @return instance of localized logger.
113122
*/
114-
protected ILocalizedLogger getLogger() {
123+
@Override
124+
protected ILocalizedLogger getLocalizedLogger() {
115125
return AqualityServices.getLocalizedLogger();
116126
}
127+
128+
/**
129+
* Visualization configuration used by dump().
130+
*
131+
* @return instance of visualization configuration.
132+
*/
133+
@Override
134+
protected IVisualizationConfiguration getVisualizationConfiguration() {
135+
return AqualityServices.getConfiguration().getVisualizationConfiguration();
136+
}
117137
}

src/main/resources/settings.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,5 +120,13 @@
120120
},
121121
"elementCache": {
122122
"isEnabled": false
123+
},
124+
"visualization": {
125+
"imageExtension": "png",
126+
"maxFullFileNameLength": 255,
127+
"defaultThreshold": 0.012,
128+
"comparisonWidth": 16,
129+
"comparisonHeight": 16,
130+
"pathToDumps": "./src/test/resources/visualDumps/"
123131
}
124132
}

src/test/java/automationpractice/forms/ProductListForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ProductListForm() {
2525
}
2626

2727
public List<ILabel> getProductContainerLabels(){
28-
return getElementFactory().findElements(By.xpath(XPATH_PRODUCT_CONTAINER), ElementType.LABEL, ElementsCount.MORE_THEN_ZERO, ElementState.DISPLAYED);
28+
return getElementFactory().findElements(By.xpath(XPATH_PRODUCT_CONTAINER), ElementType.LABEL, ElementsCount.MORE_THAN_ZERO, ElementState.DISPLAYED);
2929
}
3030

3131
private ILabel getLblFirstProduct(){

0 commit comments

Comments
 (0)