Appium移動端自動化測試-常用API-滑動相關操作
阿新 • • 發佈:2018-11-25
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); } } }