Skip to content

Commit 6a184d8

Browse files
committed
Add 150ms delay when doubletap for mobile application
1 parent f274f16 commit 6a184d8

File tree

4 files changed

+89
-18
lines changed

4 files changed

+89
-18
lines changed

source/src/main/java/org/cerberus/core/engine/gwt/impl/ActionService.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,7 +1254,7 @@ private MessageEvent doActionDoubleClick(TestCaseExecution tCExecution, String v
12541254
if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_GUI)) {
12551255
if (tCExecution.getRobotObj().getPlatform().equalsIgnoreCase(Platform.ANDROID.toString())) {
12561256
identifierService.checkWebElementIdentifier(identifier.getIdentifier());
1257-
return webdriverService.doSeleniumActionDoubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset(), false, false);
1257+
return androidAppiumService.doubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset());
12581258
} else {
12591259
if (identifier.getIdentifier().equals(SikuliService.SIKULI_IDENTIFIER_PICTURE)) {
12601260
return sikuliService.doSikuliActionDoubleClick(tCExecution.getSession(), identifier.getLocator(), "");
@@ -1265,10 +1265,12 @@ private MessageEvent doActionDoubleClick(TestCaseExecution tCExecution, String v
12651265
return webdriverService.doSeleniumActionDoubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset(), true, true);
12661266
}
12671267
}
1268-
} else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_APK)
1269-
|| tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_IPA)) {
1270-
identifierService.checkWebElementIdentifier(identifier.getIdentifier());
1271-
return webdriverService.doSeleniumActionDoubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset(), true, false);
1268+
} else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_APK)) {
1269+
identifierService.checkWebElementIdentifier(identifier.getIdentifier());
1270+
return androidAppiumService.doubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset());
1271+
} else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_IPA)) {
1272+
identifierService.checkWebElementIdentifier(identifier.getIdentifier());
1273+
return iosAppiumService.doubleClick(tCExecution.getSession(), identifier, offset.getHOffset(), offset.getVOffset());
12721274
} else if (tCExecution.getApplicationObj().getType().equalsIgnoreCase(Application.TYPE_FAT)) {
12731275
if (StringUtil.isEmptyOrNull(identifier.getLocator())) {
12741276
return sikuliService.doSikuliActionDoubleClick(tCExecution.getSession(), "", "");

source/src/main/java/org/cerberus/core/service/appium/IAppiumService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,16 @@ public interface IAppiumService {
6767
*/
6868
MessageEvent click(Session session, Identifier identifier, Integer hOffset, Integer vOffset);
6969

70+
/**
71+
*
72+
* @param session
73+
* @param identifier
74+
* @param hOffset
75+
* @param vOffset
76+
* @return
77+
*/
78+
MessageEvent doubleClick(Session session, Identifier identifier, Integer hOffset, Integer vOffset);
79+
7080
/**
7181
* @param session
7282
* @param keyName

source/src/main/java/org/cerberus/core/service/appium/impl/AppiumService.java

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -199,15 +199,13 @@ public MessageEvent click(final Session session, final Identifier identifier, In
199199
foundElementMsg.resolveDescription("NUMBER", "1");
200200
foundElementMsg.resolveDescription("ELEMENT", identifier.toString());
201201

202-
Sequence tapSequence = new Sequence(finger, 0);
203-
tapSequence.addAction(finger.createPointerMove(
204-
Duration.ofMillis(0), PointerInput.Origin.viewport(), offset.getX(), offset.getY()));
205-
tapSequence.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg()));
206-
tapSequence.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
207-
appiumDriver.perform(List.of(tapSequence));
202+
tap(appiumDriver, offset.getX(), offset.getY());
203+
208204
} else {
205+
209206
WebElement element = getElement(session, identifier, false, false);
210207
Integer numberOfElement = this.getNumberOfElements(session, identifier);
208+
211209
foundElementMsg = new MessageEvent(MessageEventEnum.ACTION_SUCCESS_FOUND_ELEMENT);
212210
foundElementMsg.resolveDescription("NUMBER", numberOfElement.toString());
213211
foundElementMsg.resolveDescription("ELEMENT", identifier.toString());
@@ -216,12 +214,7 @@ public MessageEvent click(final Session session, final Identifier identifier, In
216214
int elementX = rect.getX() + (rect.getWidth() / 2) + ((hOffset != null && hOffset != 0) ? hOffset : 0);
217215
int elementY = rect.getY() + (rect.getHeight() / 2) + ((vOffset != null && vOffset != 0) ? vOffset : 0);
218216

219-
Sequence tapSequence = new Sequence(finger, 0);
220-
tapSequence.addAction(finger.createPointerMove(
221-
Duration.ofMillis(0), PointerInput.Origin.viewport(), elementX, elementY));
222-
tapSequence.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg()));
223-
tapSequence.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
224-
appiumDriver.perform(List.of(tapSequence));
217+
tap(appiumDriver, elementX, elementY);
225218
}
226219
return new MessageEvent(MessageEventEnum.ACTION_SUCCESS_CLICK).resolveDescription("ELEMENT", identifier.toString()).resolveDescription("ELEMENTFOUND", foundElementMsg.getDescription());
227220
} catch (NoSuchElementException e) {
@@ -236,6 +229,72 @@ public MessageEvent click(final Session session, final Identifier identifier, In
236229

237230
}
238231

232+
@Override
233+
public MessageEvent doubleClick(Session session, Identifier identifier, Integer hOffset, Integer vOffset){
234+
235+
try {
236+
MessageEvent foundElementMsg;
237+
AppiumDriver appiumDriver = session.getAppiumDriver();
238+
239+
final PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger");
240+
241+
if (identifier.isSameIdentifier(Identifier.Identifiers.COORDINATE)) {
242+
final Coordinates coordinates = getCoordinates(identifier);
243+
Point offset = new Point(coordinates.getX(), coordinates.getY());
244+
foundElementMsg = new MessageEvent(MessageEventEnum.ACTION_SUCCESS_FOUND_ELEMENT);
245+
foundElementMsg.resolveDescription("NUMBER", "1");
246+
foundElementMsg.resolveDescription("ELEMENT", identifier.toString());
247+
248+
tap(appiumDriver, offset.getX(), offset.getY());
249+
Thread.sleep(150);
250+
tap(appiumDriver, offset.getX(), offset.getY());
251+
252+
253+
} else {
254+
255+
WebElement element = getElement(session, identifier, false, false);
256+
Integer numberOfElement = this.getNumberOfElements(session, identifier);
257+
258+
foundElementMsg = new MessageEvent(MessageEventEnum.ACTION_SUCCESS_FOUND_ELEMENT);
259+
foundElementMsg.resolveDescription("NUMBER", numberOfElement.toString());
260+
foundElementMsg.resolveDescription("ELEMENT", identifier.toString());
261+
262+
Rectangle rect = element.getRect();
263+
int elementX = rect.getX() + (rect.getWidth() / 2) + ((hOffset != null && hOffset != 0) ? hOffset : 0);
264+
int elementY = rect.getY() + (rect.getHeight() / 2) + ((vOffset != null && vOffset != 0) ? vOffset : 0);
265+
266+
tap(appiumDriver, elementX, elementY);
267+
Thread.sleep(150);
268+
tap(appiumDriver, elementX, elementY);
269+
}
270+
return new MessageEvent(MessageEventEnum.ACTION_SUCCESS_DOUBLECLICK).resolveDescription("ELEMENT", identifier.toString()).resolveDescription("ELEMENTFOUND", foundElementMsg.getDescription());
271+
} catch (NoSuchElementException e) {
272+
if (LOG.isDebugEnabled()) {
273+
LOG.debug(e.getMessage());
274+
}
275+
return new MessageEvent(MessageEventEnum.ACTION_FAILED_DOUBLECLICK_NO_SUCH_ELEMENT).resolveDescription("ELEMENT", identifier.toString());
276+
} catch (WebDriverException e) {
277+
LOG.warn(e.getMessage());
278+
return parseWebDriverException(e);
279+
} catch (InterruptedException e) {
280+
throw new RuntimeException(e);
281+
}
282+
283+
}
284+
285+
private void tap(AppiumDriver driver, int x, int y) {
286+
287+
PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger");
288+
Sequence tap = new Sequence(finger, 1);
289+
290+
tap.addAction(finger.createPointerMove(Duration.ZERO,PointerInput.Origin.viewport(),x,y));
291+
tap.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg()));
292+
tap.addAction(new Pause(finger, Duration.ofMillis(80)));
293+
tap.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
294+
295+
driver.perform(List.of(tap));
296+
}
297+
239298
/**
240299
* @param exception the exception need to be parsed by Cerberus
241300
* @return A new Event Message with selenium related description

source/src/main/webapp/css/tailwind/css/components.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
@apply rounded-2xl p-6;
2424
}
2525

26-
.crb_card_tag {
26+
.crb_card_tag:hover {
2727
background: var(--crb-new-bg);
2828

2929
@apply rounded-2xl p-6 border border-sky-500/30;

0 commit comments

Comments
 (0)