@@ -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
0 commit comments