JavaApp自动化测试系列[v1.0.0][常见APP操作处理附源码]

在移动端的自动化测试,在断言的时候,通常需要做截屏,配合断言的结果形成一条测试用例的综合结果,也有助于对结果的判断,如下是移动端APP截图的测试代码

[截屏操作]

/*
 * @FileName Test_CapturingScreenshots:
 * @author davieyang
 * @create 2018-11-22 13:48
 */
package testscript;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_CapturingScreenshots {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,"com.android.calculator2");
        caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,"com.android.calculator2.Calculator");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample() throws IOException{
    
    
        WebElement five=driver.findElement(By.name("5"));
        File screenShot=driver.getScreenshotAs(OutputType.FILE);
        File location=new File("screenshots");
        String screenShotName=location.getAbsolutePath()+File.separator+"testCalculator.png";
        FileUtils.copyFile(screenShot,new File(screenShotName));
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

移动端APP,滑动操作是在APP场景下常见的行为,如下是移动端滑动操作的测试代码

[滑动操作]

/*
 * @FileName Test_Scroll: the script of testing Scroll
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_Scroll_Swipe {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,"com.google.android.launcher");
        caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,"com.google.android.launcher.StubApp");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        TouchAction tAction=new TouchAction(driver);
        // Frist tap on the screen and swipe it using moveTo Function
        tAction.press(300,500).moveTo(600,500).release().perform();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

在移动端长按,弹出选项,类似这种操作,也是区别于Web端的但又很常见且频繁的操作,如下是长按的测试代码

[长按操作操作]

Java结合TestNG单元测试框架,实现移动端长按操作【源码】

/*
 * @FileName Test_LongPress: the script of testing long press
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_LongPress {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(AndroidMobileCapabilityType.VERSION, "4.4");
        caps.setCapability(AndroidMobileCapabilityType.PLATFORM_NAME, "Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as Real Device
        caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,"com.android.dialer");
        caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,"com.android.dialer.DialtactsActivity");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        WebElement dialPad=driver.findElementByAccessibilityId("dial pad");
        dialPad.click();
        TouchAction tAction=new TouchAction(driver);
        tAction.longPress(driver.findElement(By.name("0"))).perform();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

移动端APP上,通过两个手指缩放屏幕,也是区别去Web端常见且频繁的操作,如下是缩放操作的测试代码

[缩放操作]

/*
 * @FileName Pinch_Zoom: Pinch_Zoom
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.MultiTouchAction;
import io.appium.java_client.TouchAction;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_Pinch_Zoom {
    
    
    IOSDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        File app=new File("/Users/mhans/appium/ios/Zoom.app");//You can change it with your app address
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.APP,app);
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"8.1");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "iOS");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"iPad");
        caps.setCapability("udid","Real Device Id");
        driver = new IOSDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        int scrHeight = driver.manage().window().getSize().getHeight();
        int scrWidth = driver.manage().window().getSize().getWidth();
        MultiTouchAction multiTouch = new MultiTouchAction(driver);
        TouchAction tAction0 = new TouchAction(driver);
        TouchAction tAction1 = new TouchAction(driver);
        tAction0.press(scrWidth/2, scrHeight >> 1).waitAction(1000).moveTo(0,60).release();
        tAction1.press(scrWidth/2,scrHeight/2+40).waitAction(1000).moveTo(0,80).release();
        multiTouch.add(tAction0).add(tAction1);
        multiTouch.perform();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

[拖放操作]

Java结合TestNG单元测试框架,实现移动端拖拽操作【源码】

/*
 * @FileName Test_Drag&Drop: the script of testing drag&drop
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
 
import io.appium.java_client.MobileElement;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.MobileCapabilityType;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_Drag_Drop {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, "4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE,"com.google.android.launcher");
        caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY,"com.google.android.launcher.StubApp");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        MobileElement appsIcon=(MobileElement)driver.findElementByAccessibilityId("Apps");
        appsIcon.click();
        MobileElement calculator=(MobileElement)driver.findElementByName("Calculator");
        TouchAction act = new TouchAction(driver);
        act.press(calculator).perform();
        act.moveTo(driver.findElement(By.name("App info"))).release().perform();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

[拖动进度条操作]

Java结合TestNG单元测试框架,实现移动端滑动操作【源码】

/*
 * @FileName Test_Slide_Seekbar:
 * @author davieyang
 * @create 2018-11-22 14:12
 */
package testscript;
 
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_Slide_Seekbar {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        File app=new File("C:\\mobileapp\\AndroidUI.apk");//You can change it with your app address
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.APP,app);
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability("appPackage","com.android.androidui"); // This is package name of your app (you can get it from apk info app)
        caps.setCapability("appActivity","com.android.androidui.MainActivity");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        WebElement slider=driver.findElementById("com.android.androidui:id/seekBar1");
        int xAxisStartPoint = slider.getLocation().getX();
        int xAxisEndPoint = xAxisStartPoint + slider.getSize().getWidth();
        int yAxis = slider.getLocation().getY();
        TouchAction act=new TouchAction(driver);
        act.press(xAxisStartPoint,yAxis).moveTo(xAxisEndPoint-1,yAxis).release().perform();
        //pressed x axis & y axis of seekbar and move seekbar till the end
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

[下拉框操作]

Java结合TestNG单元测试框架,实现移动端Spinner操作【源码】

/*
 * @FileName Test_Spinners: the script of testing Spinners
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
 
public class Test_Spinners {
    
    
    public AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        File app=new File("C:\\mobileapp\\AndroidUI.apk");//You can change it with your app address
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.APP,app);
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability("appPackage","com.android.androidui"); // This is package name of your app (you can get it from apk info app)
        caps.setCapability("appActivity","com.android.androidui.MainActivity");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        WebElement spinner=driver.findElement(By.id("android:id/text1"));
        spinner.click();
 
        driver.scrollToExact("India");
        WebElement optionIndia=driver.findElement(By.name("India"));
        optionIndia.click();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

[切换操作]

Java结合TestNG单元测试框架,实现移动端切换操作【源码】

/*
 * @FileName Test_LongPress: the script of testing switch
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Test_Switch {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        File app=new File("C:\\mobileapp\\AndroidUI.apk");//You can change it with your app address
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.APP,app);
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability("appPackage","com.android.androidui"); // This is package name of your app (you can get it from apk info app)
        caps.setCapability("appActivity","com.android.androidui.MainActivity");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        WebElement switchbtn=driver.findElementById ("com.android.androidui:id/mySwitch");
        switchbtn.click();
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();
    }
}

[Alert操作]

Java结合TestNG单元测试框架,实现移动端操作Alert【源码】

/*
 * @FileName Test_LongPress: the script of testing alert
 * @author davieyang
 * @create 2018-11-22 10:04
 */
package testscript;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Test_Alerts {
    
    
    AndroidDriver driver;
    @BeforeClass
    public void setUp() throws MalformedURLException{
    
    
        File app=new File("C:\\mobileapp\\AndroidUI.apk");//You can change it with your app address
        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability(MobileCapabilityType.APP,app);
        caps.setCapability(MobileCapabilityType.PLATFORM_VERSION,"4.4");
        caps.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
        caps.setCapability(MobileCapabilityType.DEVICE_NAME,"Moto X");//I am using Moto X as a Real Device
        caps.setCapability("appPackage","com.android.androidui"); // This is package name of your app (you can get it from apk info app)
        caps.setCapability("appActivity","com.android.androidui.MainActivity");
        driver = new AndroidDriver (new URL("http://127.0.0.1:4723/wd/hub"), caps);
        driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
    }
    @Test
    public void testExample(){
    
    
        WebElement showAlert= driver.findElement(By.name("Show Alert"));
        showAlert.click();// it will open the Alert box
        WebElement yes=driver.findElement(By.name("Yes"));
        yes.click();// Click on Yes button
    }
    @AfterClass
    public void tearDown(){
    
    
        driver.closeApp();        }
}

猜你喜欢

转载自blog.csdn.net/dawei_yang000000/article/details/135111023