Question

I am trying to implement swipe method.May I know what is the correct way to achieve my objective?

public void swipeWithCordinateLocation(WebDriver driver,double startX,
                                       double  startY,double endX,double endY,
                                       double Duration)
{
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> swipeObject = new HashMap<String, Double>();
swipeObject.put("x", startX);
swipeObject.put("y", startY);
swipeObject.put("x", endX);
swipeObject.put("y",endY );
swipeObject.put("duration", Duration);
// HashMap[] param = {swipeObject};
js.executeScript("mobile: swipe", swipeObject);

}

common.swipeWithCordinateLocation(driver, 100.00, 500.00, 500.00, 500.00, 1.00);

But appium is perform swipe but it takes different credentials

[x=360][y=592]
 to [x=360][y=592]

. what to do? Can any one help me please.

Was it helpful?

Solution

The best way to analyze a swipe in automation is to enable "Show touches" and "pointer location" options in your developer option.

The correct code for the swipe parameters is this -

swipeObject.put("startX", 198.00);
swipeObject.put("startY", 685.00);
swipeObject.put("endX", 198.00);
swipeObject.put("endY", 550.00);
swipeObject.put("duration", 1.0);

Hope this helps.

Or even a better way is to use something like using fractions -

swipeObject.put("startX", 0.50);
swipeObject.put("startY", 0.50);
swipeObject.put("endX", 0.50);
swipeObject.put("endY", 0.35);
swipeObject.put("duration", 1.0);

OTHER TIPS

The best solution is to use swipe() of AppiumDriver as shown below:

Swipe Left:

 public void swipeLeft()
  {
      AppiumDriver appiumDriver = (AppiumDriver) driver;
      appiumDriver.context("NATIVE_APP"); 
      Dimension size = appiumDriver.manage().window().getSize(); 
      int startx = (int) (size.width * 0.8); 
      int endx = (int) (size.width * 0.20); 
      int starty = size.height / 2; 
      appiumDriver.swipe(startx, starty, endx, starty, 1000);

  }

Swipe Right:

 public void swipeRight()
  {
      AppiumDriver appiumDriver = (AppiumDriver) driver;
      appiumDriver.context("NATIVE_APP"); 
      Dimension size = appiumDriver.manage().window().getSize(); 
      int endx= (int) (size.width * 0.8); 
      int startx = (int) (size.width * 0.20); 
      int starty = size.height / 2; 
      appiumDriver.swipe(startx, starty, endx, starty, 1000);

  }

You can achieve the same swiping result with TouchAction

    TouchAction action = new TouchAction(androidDriver);
    action.press(0, 500)
            .waitAction(200)
            .moveTo(0, 200)
            .release()
            .perform();

Just play with the coordinates to get the desidered swiping.

You can also use uiautomator for the same . It will help you to automate test cases very effectively and faster.

you can read more about it at http://developer.android.com/tools/help/uiautomator/index.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top