This site is in read only mode. Please continue to browse, but replying, likes, and other actions are disabled for now.
31 / 49
Nov 2017

Hi,

Here is detailed video on how you can swipe from left to right, right to left, from top to bottom and from bottom to top using Appium.

Thanks,
Anuja

20 days later

Hi

I am new to Appium and struggling on calling a swipe method from left to right.

As per you video, driver is not having method called swipe in its intelligence.

I have tried using calling TouchAction class as well but while giving driver as argument it is
throwing the below error all the time. I am Struck and not able to move further.

Please help here

image

Still No progress. I am getting below error.

Below is my Capability SetUp. Please let me know If any where am doing wrong.

public class ExampleHorizontalSwipe {
//AndroidDriver driver;
WebDriver driver;

@Test(priority=0)
public void setUp() throws MalformedURLException
{
	
	
	DesiredCapabilities capabilities = new DesiredCapabilities();
	
	capabilities.setCapability("deviceName", "NexusTest");
	capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
	capabilities.setCapability(CapabilityType.VERSION, "5.0.1");
	capabilities.setCapability("platformName", "Android");
	capabilities.setCapability("...");
	capabilities.setCapability("appActivity", "...");
	driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
	driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

// driver = new AndroidDriver(new URL(“http://127.0.0.1:4723/wd/hub”), capabilities);
// driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}

Hi After using the below method, console show script pass successfully but execution was not happening from left to right for a specific element. please help where am i missing.

public class ExampleHorizontalSwipe {
AndroidDriver driver = null;
}

TouchAction act = new TouchAction(driver);
act.longPress(200, 180, Duration.ofSeconds(2)).moveTo(600, 180).release().perform();

Hi All, Finally I could able to resolve the issue of swiping for

Android
Hybrid App
Samsung 8 Device

before start of swiping use the switching to the Native context, after doing the swipe action

         //Find swipe start and end point from screen's.
	//Find startx point which is at right side of screen.
	int startx = (int) (size.width * 0.70);

	//Find endx point which is at left side of screen.
	int endx = (int) (size.width * 0.30);

	//Find vertical point where you wants to swipe. It is in middle of screen height.
	int starty = size.height / 2;

	System.out.println("startx = " + startx + " ,endx = " + endx + " , starty = " + starty);

	//Swipe from Right to Left.
	if(swipingDirection == Swipe.Left)
	((AndroidDriver<WebElement>)getInstance()).swipe(startx, starty, endx, starty, 2000);

	//Swipe from Left to Right.
	if(swipingDirection == Swipe.Right)
	((AndroidDriver<WebElement>)getInstance()).swipe(endx, starty, startx, starty, 2000);

switch back to WebContext to continue working with elements. Hope this solution helps

Sorry Kumar, I was missed you request.

You have done great !!! anyways for your information please find the below code which i have used to swipe left to right

AndroidDriver driver = null;

TouchAction act = new TouchAction(driver);
act.longPress(200, 180, Duration.ofSeconds(3)).moveTo(790, 180).release().perform();.

17 days later
16 days later

@Telmo_Cardoso
This solution not working, while I’m using java-client 5.0.4. Its showing error at duration and suggested change it to Duration.ofDays(duration), I have tried it but not working. could you please help for solving this problem.

That was for an old client… in 5.0.4 I use:

Duration.ofMillis(duration)  

with duration being in miliseconds (2000, for instance).

If you using latest java client v6 beta then it has changed again.

Thanks it is working cool :slight_smile: @Telmo_Cardoso

For java-client 5.x.x new solution is:

public static void swipeHorizontal(AppiumDriver driver, double startPercentage, double finalPercentage, double anchorPercentage, int duration) throws Exception {
        Dimension size = driver.manage().window().getSize();
        int anchor = (int) (size.height * anchorPercentage);
        int startPoint = (int) (size.width * startPercentage);
        int endPoint = (int) (size.width * finalPercentage);
        new TouchAction(driver).press(startPoint, anchor).waitAction(Duration.ofMillis(duration)).moveTo(endPoint, anchor).release().perform();
    }


    public static void swipeVertical(AppiumDriver driver, double startPercentage, double finalPercentage, double anchorPercentage, int duration) throws Exception {
        Dimension size = driver.manage().window().getSize();
        int anchor = (int) (size.width * anchorPercentage);
        int startPoint = (int) (size.height * startPercentage);
        int endPoint = (int) (size.height * finalPercentage);
        new TouchAction(driver).press(anchor, startPoint).waitAction(Duration.ofMillis(duration)).moveTo(anchor, endPoint).release().perform();
    }
28 days later

I have followed the reference from the above discussion but nothing got at the o/p on the real device, Please help.

Code for swipe from right to left-

Dimension size=driver.manage().window().getSize();
System.out.println(size);
int startx= (int)(size.width0.70);
int endx= (int)(size.width
0.30);
int starty=size.height/2;
long duration=0;
int y=0;
new TouchAction(driver).press(startx, y).waitAction(Duration.ofMillis(duration)).moveTo(endx, y).release().perform();

I’m getting the "true’ status in the Logs, but nothing is implementing on the real device-

logs-

[debug] [MJSONWP] Calling AppiumDriver.performTouch() with args: [[{“action”:“press”,“options”:{“x”:503,“y”:0}},{“action”:“wait”,“options”:{“ms”:0}},{“action”:“moveTo”,“options”:{“x”:216,“y”:0}},{“action”:“release”,“options”:{}}],“0a9677b1-78bf-407c-a744-8039daa28a61”]
[debug] [AndroidBootstrap] Sending command to android: {“cmd”:“action”,“action”:“swipe”,“params”:{“startX”:503,“startY”:0,“endX”:216,“endY”:0,“steps”:22}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {“cmd”:“action”,“action”:“swipe”,“params”:{“startX”:503,“startY”:0,“endX”:216,“endY”:0,“steps”:22}}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type ACTION
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command action: swipe
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Display bounds: [0,0][720,1184]
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Display bounds: [0,0][720,1184]
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Swiping from [x=503.0, y=592.0] to [x=216.0, y=592.0] with steps: 22
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [MJSONWP] Responding to client with driver.performTouch() result: true
[HTTP] <-- POST /wd/hub/session/0a9677b1-78bf-407c-a744-8039daa28a61/touch/perform 200 468 ms - 76
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {“status”:0,“value”:true}
[BaseDriver] Shutting down because we waited 45 seconds for a command
[debug] [AndroidDriver] Shutting down Android driver
[Appium] Closing session, cause was ‘New Command Timeout of 45 seconds expired. Try customizing the timeout using the ‘newCommandTimeout’ desired capability’
[Appium] Removing session 0a9677b1-78bf-407c-a744-8039daa28a61 from our master session list
[debug] [ADB] Getting connected devices…
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running ‘C:\Users\SJ\AppData\Local\Android\Sdk\platform-tools\adb.exe’ with args: ["-P",5037,"-s",“X606A1ZH69090204”,“shell”,“am”,“force-stop”,“com.letsdogether.dogether”]
[debug] [ADB] Pressing the HOME button
[debug] [ADB] Getting connected devices…
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running ‘C:\Users\SJ\AppData\Local\Android\Sdk\platform-tools\adb.exe’ with args: ["-P",5037,"-s",“X606A1ZH69090204”,“shell”,“input”,“keyevent”,3]
[debug] [AndroidBootstrap] Sending command to android: {“cmd”:“shutdown”}
[debug] [AndroidBootstrap] Received command result from bootstrap
[debug] [UiAutomator] Shutting down UiAutomator
[debug] [UiAutomator] Moving to state ‘stopping’
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got data from client: {“cmd”:“shutdown”}
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Got command of type SHUTDOWN
[AndroidBootstrap] [BOOTSTRAP LOG] [debug] Returning result: {“status”:0,“value”:“OK, shutting down”}
[debug] [AndroidBootstrap] [UIAUTO STDOUT] close [socket][/127.0.0.1:4724]
[debug] [UiAutomator] UiAutomator shut down normally
[debug] [UiAutomator] Moving to state ‘stopped’
[debug] [ADB] Attempting to kill all uiautomator processes
[debug] [ADB] Getting all processes with uiautomator
[debug] [ADB] Getting connected devices…
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running ‘C:\Users\SJ\AppData\Local\Android\Sdk\platform-tools\adb.exe’ with args: ["-P",5037,"-s",“X606A1ZH69090204”,“shell”,“ps”]
[ADB] No uiautomator process found to kill, continuing…
[debug] [UiAutomator] Moving to state ‘stopped’
[debug] [Logcat] Stopping logcat capture
[debug] [ADB] Getting connected devices…
[debug] [ADB] 1 device(s) connected
[debug] [ADB] Running ‘C:\Users\SJ\AppData\Local\Android\Sdk\platform-tools\adb.exe’ with args: ["-P",5037,"-s",“X606A1ZH69090204”,“shell”,“am”,“force-stop”,“io.appium.unlock”]
[debug] [AndroidDriver] Not cleaning generated files. Add clearSystemFiles capability if wanted.

As we can see in the logs x value changes from 503 to 216 but nothing is happening on the real device

3 months later
3 months later

Hi @Telmo_Cardoso

In Java Client: 5.x.x, it’s working fine but while I have updated to 6.1.0 it’s not working and showing error, how I can resolve please help me!

public static void swipeHorizontal(AppiumDriver driver, double startPercentage, double finalPercentage, double anchorPercentage, int duration) throws Exception {
        Dimension size = driver.manage().window().getSize();
        int anchor = (int) (size.height * anchorPercentage);
        int startPoint = (int) (size.width * startPercentage);
        int endPoint = (int) (size.width * finalPercentage);
        new TouchAction(driver).press(startPoint, anchor).waitAction(Duration.ofMillis(duration)).moveTo(endPoint, anchor).release().perform();
    }