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);
			
		}
				
	}

}

猜你喜欢

转载自blog.csdn.net/hujyhfwfh2/article/details/82943659