Skip to content

Commit 37fa04a

Browse files
authored
Merge pull request #13 from aquality-automation/feature/Swipe-Actions
Feature/swipe actions
2 parents 9f5dba2 + 0f90061 commit 37fa04a

26 files changed

+546
-28
lines changed

pom.xml

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

77
<groupId>com.github.aquality-automation</groupId>
88
<artifactId>aquality-appium-mobile</artifactId>
9-
<version>2.0.0</version>
9+
<version>2.1.0</version>
1010

1111
<packaging>jar</packaging>
1212
<name>Aquality Appium Mobile</name>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package aquality.appium.mobile.actions;
2+
3+
import aquality.appium.mobile.configuration.IConfigurationsModule;
4+
5+
/**
6+
* Describes implementations of actions services to be registered in DI container.
7+
*/
8+
public interface IActionsModule extends IConfigurationsModule {
9+
10+
/**
11+
* @return class which implements {@link ITouchActions}
12+
*/
13+
default Class<? extends ITouchActions> getTouchActionsImplementation() {
14+
return TouchActions.class;
15+
}
16+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package aquality.appium.mobile.actions;
2+
3+
import org.openqa.selenium.Point;
4+
5+
/**
6+
* Describes general Touch Actions.
7+
*/
8+
public interface ITouchActions {
9+
10+
/**
11+
* Swipes from start point to end point using TouchAction.
12+
*
13+
* @param startPoint point on screen to swipe from.
14+
* @param endPoint point on screen to swipe to.
15+
*/
16+
void swipe(Point startPoint, Point endPoint);
17+
18+
/**
19+
* Performs long press action and moves cursor from a start point to an end point imitating the swipe action.
20+
*
21+
* @param startPoint point on screen to swipe from.
22+
* @param endPoint point on screen to swipe to.
23+
*/
24+
void swipeWithLongPress(Point startPoint, Point endPoint);
25+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package aquality.appium.mobile.actions;
2+
3+
/**
4+
* The enum describing the possible swipe directions.
5+
*/
6+
public enum SwipeDirection {
7+
UP,
8+
DOWN,
9+
LEFT,
10+
RIGHT;
11+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package aquality.appium.mobile.actions;
2+
3+
import aquality.appium.mobile.application.AqualityServices;
4+
import aquality.appium.mobile.configuration.ITouchActionsConfiguration;
5+
import aquality.selenium.core.utilities.IElementActionRetrier;
6+
import io.appium.java_client.TouchAction;
7+
import io.appium.java_client.touch.offset.PointOption;
8+
import org.openqa.selenium.Point;
9+
import java.util.function.UnaryOperator;
10+
import static io.appium.java_client.touch.WaitOptions.waitOptions;
11+
12+
public class TouchActions implements ITouchActions {
13+
14+
@Override
15+
public void swipe(Point startPoint, Point endPoint) {
16+
AqualityServices.getLocalizedLogger().info(
17+
"loc.action.swipe",
18+
startPoint.getX(),
19+
startPoint.getY(),
20+
endPoint.getX(),
21+
endPoint.getY());
22+
performTouchAction(touchAction -> touchAction
23+
.press(PointOption.point(startPoint))
24+
.waitAction(waitOptions(AqualityServices.get(ITouchActionsConfiguration.class).getSwipeDuration())),
25+
endPoint);
26+
}
27+
28+
@Override
29+
public void swipeWithLongPress(Point startPoint, Point endPoint) {
30+
AqualityServices.getLocalizedLogger().info(
31+
"loc.action.swipeLongPress",
32+
startPoint.getX(),
33+
startPoint.getY(),
34+
endPoint.getX(),
35+
endPoint.getY());
36+
performTouchAction(touchAction -> touchAction.longPress(PointOption.point(startPoint)), endPoint);
37+
}
38+
39+
protected void performTouchAction(UnaryOperator<TouchAction<?>> function, Point endPoint) {
40+
TouchAction<?> touchAction = new TouchAction<>(AqualityServices.getApplication().getDriver());
41+
AqualityServices.get(IElementActionRetrier.class).doWithRetry(() ->
42+
function.apply(touchAction).moveTo(PointOption.point(endPoint)).release().perform());
43+
}
44+
}

src/main/java/aquality/appium/mobile/application/AqualityServices.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package aquality.appium.mobile.application;
22

3+
import aquality.appium.mobile.actions.ITouchActions;
34
import aquality.appium.mobile.configuration.IApplicationProfile;
45
import aquality.appium.mobile.configuration.IConfiguration;
56
import aquality.appium.mobile.configuration.ILocalServiceSettings;
@@ -190,4 +191,13 @@ public static ILocalServiceSettings getLocalServiceSettings() {
190191
public static IConfiguration getConfiguration() {
191192
return get(IConfiguration.class);
192193
}
194+
195+
/**
196+
* Gets the the utility used to perform touch actions.
197+
*
198+
* @return instance of touch actions.
199+
*/
200+
public static ITouchActions getTouchActions() {
201+
return get(ITouchActions.class);
202+
}
193203
}

src/main/java/aquality/appium/mobile/application/MobileModule.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package aquality.appium.mobile.application;
22

3+
import aquality.appium.mobile.actions.IActionsModule;
4+
import aquality.appium.mobile.actions.ITouchActions;
35
import aquality.appium.mobile.configuration.IApplicationProfile;
46
import aquality.appium.mobile.configuration.IConfiguration;
57
import aquality.appium.mobile.configuration.IConfigurationsModule;
68
import aquality.appium.mobile.configuration.ILocalServiceSettings;
9+
import aquality.appium.mobile.configuration.ITouchActionsConfiguration;
710
import aquality.appium.mobile.elements.IElementsModule;
811
import aquality.appium.mobile.elements.interfaces.IElementFactory;
912
import aquality.appium.mobile.screens.screenfactory.IScreenFactory;
@@ -12,7 +15,7 @@
1215
import com.google.inject.Provider;
1316
import com.google.inject.Singleton;
1417

15-
public class MobileModule extends AqualityModule<Application> implements IConfigurationsModule, IElementsModule, IScreensModule {
18+
public class MobileModule extends AqualityModule<Application> implements IConfigurationsModule, IElementsModule, IScreensModule, IActionsModule {
1619

1720
public MobileModule(Provider<Application> applicationProvider) {
1821
super(applicationProvider);
@@ -26,5 +29,7 @@ protected void configure() {
2629
bind(IConfiguration.class).to(getConfigurationImplementation());
2730
bind(IElementFactory.class).to(getElementFactoryImplementation());
2831
bind(IScreenFactory.class).to(getScreenFactoryImplementation());
32+
bind(ITouchActionsConfiguration.class).to(getTouchActionsConfigurationImplementation());
33+
bind(ITouchActions.class).to(getTouchActionsImplementation());
2934
}
3035
}

src/main/java/aquality/appium/mobile/configuration/Configuration.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,19 @@ public class Configuration implements IConfiguration {
1313
private final IApplicationProfile applicationProfile;
1414
private final ILoggerConfiguration loggerConfiguration;
1515
private final IElementCacheConfiguration elementCacheConfiguration;
16+
private final ITouchActionsConfiguration touchActionsConfiguration;
1617

1718
@Inject
1819
public Configuration(ITimeoutConfiguration timeoutConfiguration, IRetryConfiguration retryConfiguration,
1920
IApplicationProfile applicationProfile, ILoggerConfiguration loggerConfiguration,
20-
IElementCacheConfiguration elementCacheConfiguration) {
21+
IElementCacheConfiguration elementCacheConfiguration,
22+
ITouchActionsConfiguration touchActionsConfiguration) {
2123
this.timeoutConfiguration = timeoutConfiguration;
2224
this.retryConfiguration = retryConfiguration;
2325
this.applicationProfile = applicationProfile;
2426
this.loggerConfiguration = loggerConfiguration;
2527
this.elementCacheConfiguration = elementCacheConfiguration;
28+
this.touchActionsConfiguration = touchActionsConfiguration;
2629
}
2730

2831
@Override
@@ -49,4 +52,9 @@ public ILoggerConfiguration getLoggerConfiguration() {
4952
public IElementCacheConfiguration getElementCacheConfiguration() {
5053
return elementCacheConfiguration;
5154
}
55+
56+
@Override
57+
public ITouchActionsConfiguration getTouchActionsConfiguration() {
58+
return touchActionsConfiguration;
59+
}
5260
}

src/main/java/aquality/appium/mobile/configuration/IConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@ public interface IConfiguration {
4141
* @return Configuration of element caching.
4242
*/
4343
IElementCacheConfiguration getElementCacheConfiguration();
44+
45+
/**
46+
* Gets configuration of touch actions.
47+
*
48+
* @return Configuration of touch actions.
49+
*/
50+
ITouchActionsConfiguration getTouchActionsConfiguration();
4451
}

src/main/java/aquality/appium/mobile/configuration/IConfigurationsModule.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,10 @@ default Class<? extends IConfiguration> getConfigurationImplementation() {
2626
return Configuration.class;
2727
}
2828

29+
/**
30+
* @return class which implements {@link ITouchActionsConfiguration}
31+
*/
32+
default Class<? extends ITouchActionsConfiguration> getTouchActionsConfigurationImplementation() {
33+
return TouchActionsConfiguration.class;
34+
}
2935
}

0 commit comments

Comments
 (0)