Home Appium Environment Setup Android Emulators iOS Simulators Appium Architecture Android chrome app automation Safari browser automation Appium Capabilities Inspecting android apps Native Android app automation Inspecting iOS app Native iOS app Automation Real Android Phone automation Real iPhone automation Element Identification Pressing button FaceId and TouchId Fingerprint automation Drag and Drop Tap and press Swipe gestures Hybrid app automation Execute script Synchronization in Appium Screenshots Page Object Models Cucumber and Appium Appium integration with azure Appium and Selenium Grid Running tests in browserstack Parallel testing Recording tests Mobile automation framework Errors and Exceptions in Appium Mobile automation test strategy Mobile automation challenges Appium QnA
Drag and drop operation in appium
Some important points
- TouchAction and MultiTouchAction class can be used to do drag and drop operation
- press, waitAction and moveTo methods should be called in sequence to perform drag and drop
- We can find the Point of Source and Destination element using getLocation method
- Finally perform method of MultiTouchAction class can be used to perform drag and drop action
- Swiping specific element is same as drag and drop operation. Only difference is that we do not have destination element. In this case, we can use destination point.
- In same way, we can do this action in iOS as well
package org.softpost.android.simulator;
import io.appium.java_client.MultiTouchAction;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.time.Duration;
import java.util.concurrent.TimeUnit;
/**
* Created by Sagar on 10-07-2016.
*/
public class DragDropTest {
WebDriver driver;
@Test
public void test1() throws Exception{
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("platformName", "android");
caps.setCapability("deviceName", "Pixel 9");
caps.setCapability("appPackage", "com.android.settings");
caps.setCapability("appActivity","com.android.settings.Settings");
caps.setCapability("automationName","uiautomator2");
try {
driver = new AndroidDriver<AndroidElement>(new URL("http://0.0.0.0:4723/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Thread.sleep(5000);
//WaitUntilElementIsDisplayed(By.xpath("//android.widget.TextView[contains(@text,'Security')]"),10);
WebElement battery = driver.findElement(By.xpath("//android.widget.TextView[contains(@text,'Battery')]"));
WebElement sound = driver.findElement(By.xpath("//android.widget.TextView[contains(@text,'Sound')]"));
TouchAction action = new TouchAction(((AndroidDriver<AndroidElement>)driver));
//build drag and drop action...Dragging Battery element on Sound element
action.press(new PointOption().point(battery.getLocation().getX(),battery.getLocation().getY()))
.waitAction(new WaitOptions().withDuration(Duration.ofSeconds(1)))
.moveTo(new PointOption().point(sound.getLocation().getX(),battery.getLocation().getY())).release();
//Perform drag and drag action
MultiTouchAction multiAction = new MultiTouchAction(((AndroidDriver<AndroidElement>)driver));
multiAction.add(action).perform();
Thread.sleep(5000);
}catch (Exception ex) {
ex.printStackTrace();
System.out.println(driver.getPageSource());
}finally {
driver.quit();
}
}
protected boolean WaitUntilElementIsDisplayed(By by, int seconds)
{
try
{
WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(by));
return true;
}
catch (Exception ex)
{
System.out.println("Exception while waiting {ex.Message}" + ex.getMessage());
return false;
}
}
}
Web development and Automation testing
solutions delivered!!