4444import org .cerberus .core .util .StringUtil ;
4545import org .json .JSONException ;
4646import org .openqa .selenium .*;
47+ import org .openqa .selenium .interactions .Pause ;
4748import org .openqa .selenium .interactions .PointerInput ;
4849import org .openqa .selenium .interactions .Sequence ;
4950import org .openqa .selenium .support .ui .ExpectedConditions ;
@@ -193,7 +194,7 @@ public MessageEvent type(Session session, Identifier identifier, String valueToT
193194 }
194195 }
195196
196- @ Override
197+ @ Override //#FIXME SELENIUM #TEST (respect w3c)
197198 public MessageEvent click (final Session session , final Identifier identifier , Integer hOffset , Integer vOffset ) {
198199 try {
199200 MessageEvent foundElementMsg ;
@@ -514,13 +515,29 @@ public String getElementPosition(Session session, Identifier identifier) {
514515 @ Override
515516 public MessageEvent longPress (final Session session , final Identifier identifier , final Integer timeDuration ) {
516517 try {
517- final TouchAction action = new TouchAction ((PerformsTouchActions ) session .getAppiumDriver ());//#FIXME SELENIUM #TEST (was cast to PerformsTouchActions)
518+ PointerInput finger = new PointerInput (PointerInput .Kind .TOUCH , "finger" );
519+ Sequence longPressSequence = new Sequence (finger , 0 );
520+ int elementX ;
521+ int elementY ;
522+
518523 if (identifier .isSameIdentifier (Identifier .Identifiers .COORDINATE )) {
519524 final Coordinates coordinates = getCoordinates (identifier );
520- action .press (PointOption .point (coordinates .getX (), coordinates .getY ())).waitAction (WaitOptions .waitOptions (Duration .ofMillis (timeDuration ))).release ().perform ();
525+ elementX = coordinates .getX ();
526+ elementY = coordinates .getY ();
521527 } else {
522- action .press (ElementOption .element (getElement (session , identifier , false , false ))).waitAction (WaitOptions .waitOptions (Duration .ofMillis (timeDuration ))).release ().perform ();
528+ WebElement element = getElement (session , identifier , false , false );
529+ Rectangle rect = element .getRect ();
530+ elementX = rect .getX () + rect .getWidth () / 2 ;
531+ elementY = rect .getY () + rect .getHeight () / 2 ;
523532 }
533+
534+ longPressSequence .addAction (finger .createPointerMove (Duration .ofMillis (0 ), PointerInput .Origin .viewport (), elementX , elementY ));
535+ longPressSequence .addAction (finger .createPointerDown (PointerInput .MouseButton .LEFT .asArg ()));
536+ longPressSequence .addAction (new Pause (finger , Duration .ofMillis (timeDuration )));
537+ longPressSequence .addAction (finger .createPointerUp (PointerInput .MouseButton .LEFT .asArg ()));
538+
539+ session .getAppiumDriver ().perform (List .of (longPressSequence ));
540+
524541 return new MessageEvent (MessageEventEnum .ACTION_SUCCESS_LONG_CLICK ).resolveDescription ("ELEMENT" , identifier .toString ());
525542 } catch (NoSuchElementException e ) {
526543 if (LOG .isDebugEnabled ()) {
@@ -531,7 +548,6 @@ public MessageEvent longPress(final Session session, final Identifier identifier
531548 LOG .warn (e .getMessage ());
532549 return parseWebDriverException (e );
533550 }
534-
535551 }
536552
537553 @ Override
0 commit comments