Pages

Sunday, 3 July 2022

How to Automate Gestures on Mobile? TouchAction Appium, Swipe using touch actions in appium

 


Mobile Automation Testing Appium INterview Q&A SET - 01

How To Create Android Emulator Device

Mobile AUtomation Testing Appium Interview Q&A Set-02

Top API Interview Question 1-10




In mobile automation below listed Appium actions most of the time we use only these actions for complete automation. So these actions are very important. we should be aware of these actions

Appium supports the following gestures:


  1. Tap on an element.
  2. Tap on x, y coordinates.
  3. Press an element for a particular duration.
  4. Press x, y coordinates for a particular duration.
  5. Drag(Swipe) one element to another element.
  6. Multitouch for an element.


Appium Supports these gestures using the TouchAction Class.

TouchAction touch = new TouchAction(driver):

Supported methods for TouchAction are:

Method Name
 Purpose
press(PointOption pressOptions)
Press action on the screen.
longPress(LongPressOptions longPressOptions)
Press and hold the at the center of an element until the context menu event has fired.
tap(PointOption tapOptions)
Tap on a position.
moveTo(PointOption moveToOptions)
Moves current touch to a new position.
cancel()
Cancel this action, if it was partially completed by the performsTouchActions.
perform()
Perform this chain of actions on the performsTouchActions.


Before exploring each mentioned action we need to understand the significance of perform() as it plays a vital role. The Appium client simply records all the instructions and actions on the client side and stores the intermediate values in a local data structure. The perform() method is used to send all actions to the appium server - as soon as perform() is called, the intermediate actions and instructions are converted to JSON and sent to the appium server, and then the actual action is being performed. So for any gesture code the last method called would be perform()

NoteThis is a common omission during development, forgetting to call perform() and wondering why your test isn’t working!

******************

What are the Locators used for Mobile Automation Testing?


Ans: Click Here For Mobile Testing Locators


**************************



1) Tap on element in Appium:


Method: tap(TapOptions tapOptions)

Usage: It is the simplest action, as the name suggests it will simply click/tap
on a particular location. It is a combination of press() and release()

Example:
TouchAction touchAction = new TouchAction(driver);
touchAction.tap(tapOptions()
           .withElement(element(androidElement)))
           .perform()

NOTE: Here you can also put the wait along with the tap action, for example:


new TouchAction(driver)
.tap(tapOptions().withElement(element(androidElement)))
.waitAction(waitOptions(Duration.ofMillis(millis)))
.perform();

2) Tap on x, y coordinates in Appium:


if you are not able to get the selector for any element for any reason then only one survival option remains. Which is to get the x, y coordinates for that element.

Now the question is how can you get the x,y coordinate?


  • It depends...
  • Because you can get the Pointer location in Android but you can not get it in iOS devices.



   Getting the pointer location in Android:

  1.  Move to Settings > Developer options
  2.  Enable the Pointer location.
  3. Now move to any application for which you need the coordinates of a particular location. Tap on the location and you will get the coordinates for that spot at the top of the screen.

Getting the pointer location in iOS:

iOS does not support the pointer location and there aren’t even any third party apps or tools which come to the rescue. Therefore you need to calculate it using screen resolution and a little bit of prediction. In case you don’t get success at first, you can use trial and error to get the needed location.
Lets look into click tap by x, y co-ordinate method:

Method: tap(PointOption pointOptions) 

Usage: It is used to tap on a particular x,y coordinate point.

Example:

TouchAction touchAction = new TouchAction(driver);
touchAction.tap(PointOption.point(1280, 1013))
.perform()


NOTE: Similar like Tap on element you can put the wait along with the tap action, for example:


new TouchAction(driver)
.tap(point(x, y))
.waitAction(waitOptions(Duration.ofMillis(millis)))
.perform();


3) Press an element for a particular duration :


Method: press(PointOption pressOptions)

Usage: It is used to apply the press action. After the press action you also need to release so that the state would be in press mode. You do so by calling the release() function after calling press().

Example:
TouchAction touchAction = new TouchAction(driver);
touchAction.press(element(element))
.waitAction(waitOptions(ofSeconds(seconds)))
.release()
.perform();

4) Press x, y coordinates for a particular duration in Appim :


Method: press(PointOption pressOptions)

Usage: Similar to Press(ing) an element for a particular duration, here you just need to pass x, y coordinates instead of an element and don’t forget to call the release() function after calling press().

Example:
TouchAction touchAction = new TouchAction(driver);
touchAction.press(point(x,y))
.waitAction(waitOptions(ofSeconds(seconds)))
.release()
.perform();


5) Drag(swipe) one element to an another element in Appim:


Dragging one element to another element is one kind of swiping action.
But here location in coordinates would not matter as we have both of the elements :

1. Element which needs to be dragged,
2. Element upon which another element will be dragged).

TouchAction swipe = new TouchAction(driver)
.press(ElementOption.element(element1))
.waitAction(waitOptions(ofSeconds(2)))
.moveTo(ElementOption.element(element2))
.release()
.perform();


6) MultiTouch in Appim:


As the name suggests it means multiple touches happening at the same time.
For example on iOS if you want to move to the Main screen, you need to use 5 fingers and do a swipe.
Multi Touch is handled by the MultiTouchAction class. It has a  add((TouchActions touchActions) method so in which we need to pass a TouchActions object

So let say you want to press on 5 different points at a time then first you need to create 5 TouchActions, but here the important thing is we are not having a perform method at the end. We just need to call the release method for the TouchAction object, and then pass those values into the add method of the MultiTouchAction class.



    a. Multiple touches at a time.



TouchAction touchActionOne = new TouchAction();
touchActionOne.press(PointOption.point(100, 100));
touchActionOne.release();
TouchAction touchActionTwo = new TouchAction();
touchActionTwo.press(PointOption.point(200, 200));
touchActionTwo.release();
MultiTouchAction action = new MultiTouchAction();
action.add(touchActionOne);
action.add(touchActionTwo);
action.perform();

OR if you want to perform multi touch on particular elements then use the below code snippet.



TouchAction touchAction1 = new TouchAction(driver)
.tap(ElementOption.element(e1))
.release();
   TouchAction touchAction2 = new TouchAction(driver)
   .tap(ElementOption.element(e2))
   .release();

MultiTouchAction action = new MultiTouchAction();
action.add(touchAction1);
action.add(touchAction2);
action.perform();

b. Swiping using multiple fingers.


TouchAction touchActionOne = new TouchAction();
touchActionOne.press(PointOption.point(100, 100));
touchActionOne.moveTo(PointOption.point(500, 100));
touchActionOne.release();
TouchAction touchActionTwo = new TouchAction();
touchActionTwo.press(PointOption.point(100, 200));
touchActionTwo.moveTo(PointOption.point(500, 100));
touchActionTwo.release();
MultiTouchAction action = new MultiTouchAction();
action.add(touchActionOne);
action.add(touchActionTwo);
action.perform();

NOTE: As mentioned earlier only MultiTouchAction should call the perform() method at the end. For TouchActions, the perform() method should not be called otherwise instructions will be sent to the Appium server and the click will happen before the Multi Touch action.

*******************************************************************
For any doubts or career guidance, arrange a 1:1 call with me 


********************************************************************


Learn (API-Microservice)Testing+(CoreJava+UI)-SDET with Self Paced Videos and one LIVE Doubt Session

TRANING VIDEOS AVAILABLE with Live Doubt Session @4500/-(course-1 below,API TRaining Videos With ClassNotes and Coding Set) and 6500/- (API+UI, both course-1 & 2 below) Check Training Page for Course Content or reach out @whatsapp +91-9619094122
Entire course content can be found below:  COURSE CONTENT


***********************




REVISION:==>

==>. How we can verify the Appium installation, what is Appium doctor?


Ans:   To verify that all of Appium's dependencies are met we can use appium-doctor.
Install it with commandnpm install -g appium-doctor, then run the appium-doctor command, supplying the --ios or --android flags to verify that all of the dependencies are set up correctly.


==>. What is the default port for Appium?

Ans: 4723 

This port information is important since we will have to direct your test client to make sure to connect to Appium on this port. If we want to change, the port, we can do so by using the -p flag when starting Appium.

==> What are the important Appium Desired Capabilities?

Ans

{

"platformName": "iOS", "platformVersion": "11.0", "deviceName": "iPhone 11", "automationName": "XCUITest", "app": "/path to app" }

==> Mention the Automation engine for android and IOS?

Ans:
Android: UiAutomator2
IOS : XCUITest

Check below link for question and answers with code:

Top API Interview Question 1-10

*************************************************

SeleniumWebdriver Automation Testing Interview Questions:

API Testing Interview Question Set:
https://automationreinvented.blogspot.com/search/label/Rest-API

 
Kubernetes Interview Question Set
https://automationreinvented.blogspot.com/search/label/Kubernetes

 
Docker Interview Question Set
https://automationreinvented.blogspot.com/2020/02/top-18-docker-commands-for-aytomation.html

 
Linux Interview question Set
https://automationreinvented.blogspot.com/search/label/Linux

 
Automation Testing/SDET Framework Design
https://automationreinvented.blogspot.com/search/label/FrameworkDesign


Java Related Interview Question Set

https://automationreinvented.blogspot.com/search/label/Java


GIT Interview Question Set:
https://automationreinvented.blogspot.com/search/label/GIT


Coding Interview Question Set:
https://automationreinvented.blogspot.com/search/label/Coding%20Questions
Mobile Testing Interview Question Set:
https://automationreinvented.blogspot.com/search/label/Mobile%20Testing

Python Interview Question Set for QAE - SDET - SDE:
https://automationreinvented.blogspot.com/search/label/Python
Special Thanks to m-hadimani.

No comments:

Post a Comment