1. 程式人生 > >Appium移動端自動化測試-常用API-滑動相關操作

Appium移動端自動化測試-常用API-滑動相關操作

1:APP的滑動的概念

如下圖 橫方向為 X軸 豎方向為Y軸 左上側的左邊為(0,0),右下側的最大左邊為螢幕的解析度(例如1080*1920 座標為(1080,1920));頁面左滑動 Y軸座標值不變 X軸座標值從大到小  頁面向上滑動 X軸座標值不變 Y軸座標值從小變大

2:常用API的介紹

2.1:普通的上下左右滑動

swipe(startx, starty, endx, endy, duration)

引數介紹:

startx:起始滑動的X軸座標值

starty:起始滑動的Y軸座標值

endx:結束滑動的X軸座標值

endy:結束滑動的Y軸座標值

duration:滑動過程的延時時間單位為毫秒(一般設定為500-3000)

2.2:獲取APP的頁面解析度

如下 為獲取APP最大解析度的X,Y軸的最大值

driver.manage().window().getSize().getWidth();
driver.manage().window().getSize().getHeight();

2.3:元素滑動方向 SwipeElementDirection

如下圖API有上下左右4個API可選

element.swipe(SwipeElementDirection.LEFT, 20, 20, 500);

SwipeElementDirection.LEFT:表示針對element這個物件向左側滑動

 20:由於是左側滑動 表示該element元素的X軸上的最大值減20作為偏移量

20:由於是左側滑動 表示該element元素的X軸上的最小值加20作為偏移量

500:整個過程延時500毫秒

3:以CSND APP為例子演示一下

 

package com.AutoAPP.APP;

import io.appium.java_client.SwipeElementDirection;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.remote.MobileCapabilityType;

import java.net.URL;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;

public class AppTest {
	
	public static AndroidDriver<AndroidElement> initDriver(String appPackage,String appActivity) throws Exception{

		DesiredCapabilities caps=new DesiredCapabilities();
		//
		caps.setCapability(MobileCapabilityType.DEVICE_NAME, "anything");
		
		caps.setCapability("appPackage", appPackage);
		//要啟動的應用的起始activity
		caps.setCapability("appActivity", appActivity);
		//resetKeyBoard是執行完測試後將裝置的輸入法重置回原有的輸入法
		caps.setCapability("unicodeKeyBoard", true);
		caps.setCapability("resetKeyBoard", true);
		//不對app進行重簽名,因為有的app在重簽名之後無法使用
		caps.setCapability("noSign", true);
		//設定session的超時時間
		caps.setCapability("newCommandTimeout", 600);
		
		caps.setCapability("udid", "2be8d4ca9805");
		//http://127.0.0.1:4723/wd/hub 為Appium的URL連線  
		return new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"), caps);
			
	}
	
	/**
	 * 左右上下滑動
	 * */
	//頁面向右側滑動  Y軸不變 x軸從小增大
	public static void SwipeRight(AndroidDriver<AndroidElement> driver){
		
		//獲取APP的x y 軸 尺寸 
		int X = driver.manage().window().getSize().getWidth();
		int Y = driver.manage().window().getSize().getHeight();
		//Y軸不變 Y/2表示 正好處於APP的Y軸中心位置滑動
		//X/9表示其實位置為最大值的1/9處開始滑動  如果螢幕解析度是 900*1000 那麼就是從X軸 100處滑動
		//同理 8*X/9表示結束於X軸 800處
		driver.swipe(X/9, Y/2, 8*X/9, Y/2, 500);//注意延時一定不能太小 否則無法滑動
		
	}
	
	//頁面向左滑動
	public static void SwipeLeft(AndroidDriver<AndroidElement> driver){
		
		//獲取APP的x y 軸 尺寸 
		int X = driver.manage().window().getSize().getWidth();
		int Y = driver.manage().window().getSize().getHeight();
		
		//向左滑動  X軸從大到小 Y軸不變
		driver.swipe(8*X/9, Y/2, X/9, Y/2, 500);//注意延時一定不能太小 否則無法滑動
	}
	
	//頁面向上滑動 X軸不變  Y軸
	public static void SwipeUp(AndroidDriver<AndroidElement> driver){
		
		//獲取APP的x y 軸 尺寸 
		int X = driver.manage().window().getSize().getWidth();
		int Y = driver.manage().window().getSize().getHeight();
		
		//向左滑動  Y軸從小到大 X軸不變
		driver.swipe(X/2, 8*Y/10, X/2, 2*Y/10, 500);//注意延時一定不能太小 否則無法滑動
	}
	
	
	//頁面向上滑動 X軸不變  Y軸  
	public static void SwipeDown(AndroidDriver<AndroidElement> driver){
		
		//獲取APP的x y 軸 尺寸 
		int X = driver.manage().window().getSize().getWidth();
		int Y = driver.manage().window().getSize().getHeight();
		
		//向左滑動  Y軸從小到大 X軸不變
		driver.swipe(X/2, 2*Y/10, X/2, 8*Y/10, 500);//注意延時一定不能太小 否則無法滑動
	}
	
	
	//對元素框進行滑動
	public static void SwipeEle(AndroidDriver<AndroidElement> driver){
		
		//net.csdn.csdnplus:id/vp_cycle_image[@index='1']
		AndroidElement element = driver.findElement(By.id("net.csdn.csdnplus:id/vp_cycle_image"));
	
		element.swipe(SwipeElementDirection.LEFT, 20, 20, 500);
	}
	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		AndroidDriver<AndroidElement> driver = initDriver("net.csdn.csdnplus","net.csdn.csdnplus.activity.SplashActivity");
		
		Thread.sleep(10000);
		
		//對元素框進行滑動
		for(int i = 0 ; i<3; i++){
			
			SwipeEle(driver);
			
			Thread.sleep(2000);
			
		}
		
		//向左滑動5次
		for(int i = 0 ; i<5; i++){
			
			SwipeLeft(driver);
			
			Thread.sleep(2000);
			
		}
		
		//向右滑動3次
		for(int i = 0 ; i<2; i++){
			
			SwipeRight(driver);
			
			Thread.sleep(2000);
			
		}
		
		//頁面向下滑動3次
		for(int i = 0 ; i<3; i++){
			
			SwipeUp(driver);
			
			Thread.sleep(2000);
			
		}
		
		//頁面向上滑動3次
		for(int i = 0 ; i<3; i++){
			
			SwipeDown(driver);
			
			Thread.sleep(2000);
			
		}
				
	}

}