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