1. 程式人生 > >Appium移動端自動化測試-常用API

Appium移動端自動化測試-常用API

1:針對元素的操作

1.1:獲取元素的屬性值

如下圖 我們可以獲取元素的屬性有Node Detail下的所有key對應的value屬性值

1.2:獲取元素座標

1:我們可以獲取的資料有 元素的起始座標 X Y值 ,和元素的高 寬 (注意 不能獲取元素的結束點座標)

1.2.2:獲取的方法

1:獲取元素起始點座標

        int startX = element.getLocation().getX();//獲取起始點X軸座標
        int startY = element.getLocation().getY();//獲取起始點Y軸座標

2:獲取元素的寬度 高度

        int Width = element.getSize().getWidth();//獲取元素的寬
        int Height = element.getSize().getHeight();//獲取元素的高

3:元素的結束點座標 為  (startX+Width,startY+Height)

1.2.3:演示程式碼

package com.AutoAPP.APP;

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", "88MFBML3H4MH");
		//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);
			
	}
	
	/**
	 * 獲取元素的座標
	 * */
	public static void getElementLocate(AndroidElement element){
		//獲取元素起始點座標
		int startX = element.getLocation().getX();//獲取起始點X軸座標
		int startY = element.getLocation().getY();//獲取起始點Y軸座標
		
		//獲取元素的寬度 高度
		int Width = element.getSize().getWidth();//獲取元素的寬
		int Height = element.getSize().getHeight();//獲取元素的高
		
		//元素的結束點座標 為  (startX+Width,startY+Height)
		
		System.out.println("元素的結束點座標是:("+(startX+Width)+","+(startY+Height)+")");
	}
	
	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);
		
		AndroidElement element = driver.findElement(By.name("我的"));
		
		getElementLocate(element);
	}

}

1.3:元素的長按

1.3.1:長按的操作 

        
        TouchAction action = new TouchAction(driver);
        
        action.longPress(element, 3000).release().perform();//對element元素長按3s後鬆手

1.3.2:程式碼演示

package com.AutoAPP.APP;

import io.appium.java_client.TouchAction;
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", "88MFBML3H4MH");
		//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);
			
	}
	
	/**
	 * 獲取元素的長按操作
	 * */
	public static void EleLongPress(AndroidElement element,AndroidDriver<AndroidElement> driver){
		
		TouchAction action = new TouchAction(driver);
		
		action.longPress(element, 3000).release().perform();//對element元素長按3s後鬆手
		
	}
	
	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);
		
		AndroidElement element = driver.findElement(By.name("我的"));
		
		System.out.println("開始長按了");
		
		EleLongPress(element,driver);
	}

}

1.4:座標點的長按/點選

1.4.1:操作步驟

        TouchAction action = new TouchAction(driver);
        
        action.longPress(x, y, 200);//需要點選的x,y軸座標 和延時時間(毫秒)

1.4.2:演示程式碼

package com.AutoAPP.APP;

import io.appium.java_client.TouchAction;
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", "88MFBML3H4MH");
		//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);
			
	}
	
	/**
	 * 獲取元素的長按操作
	 * */
	public static void EleLongPress(AndroidDriver<AndroidElement> driver,int x, int y){
		
		TouchAction action = new TouchAction(driver);
		
		action.longPress(x, y, 200);
		
	}
	
	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);
		
		System.out.println("開始點選座標了長按了");
		
		EleLongPress(driver,562,655);
	}

}

1.5:tap點選操作

1.5.1:tap點選元素操作步驟

driver.tap(1, element, 100);//引數1:一根手指   100:延時100毫秒

1,5,2:tap點選元素程式碼演示

package com.AutoAPP.APP;

import io.appium.java_client.TouchAction;
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", "88MFBML3H4MH");
		//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);
			
	}
	
	/**
	 * tap 元素的單擊
	 * */
	public static void TapPress(AndroidDriver<AndroidElement> driver,AndroidElement element){
		
		driver.tap(1, element, 100);//引數1:一根手指   100:延時100毫秒
		
	}
	
	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);
		
		AndroidElement element = driver.findElement(By.name("我的"));
		
		System.out.println("開始點選元素了");
		
		TapPress(driver,element);
	}

}

1.6:tap點選

1.6.1:tap點選座標、元素操作步驟

        driver.tap(1, x , y , 200);//對X,Y軸座標進行點選

        element.tap(1, delayTimes);//對元素的tap點選操作

1.6.2:tap點選座標、元素的演示程式碼

package com.AutoAPP.APP;

import io.appium.java_client.TouchAction;
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", "88MFBML3H4MH");
		//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);
			
	}
	
	/**
	 * tap 元素的單擊
	 * */
	public static void TapPressByLocate(AndroidDriver<AndroidElement> driver,AndroidElement element,int x,int y,int delayTimes){
		
		driver.tap(1, x , y , delayTimes);//對X,Y軸座標進行點選
		element.tap(1, delayTimes);//對元素的tap點選操作
		
	}
	
	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);
		
		AndroidElement element = driver.findElement(By.name("我的"));
		
		System.out.println("開始點選元素了");
		//先點選座標 後再點選"我的"對應的元素位置
		TapPressByLocate(driver,element,562,655.200);
	}

}

2:對driver的操作

....https://blog.csdn.net/niubitianping/article/details/52528146

3:隱式等待

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

隱式等待是指在尋找元素的時候會一直尋找 如果在指定的時間內找到了 就停止尋找 僅需執行 如果在指定的時間內沒有找到則報錯

如上程式碼 表示在10秒內尋找某一個元素 如果找到立馬執行 沒找到時間控制在10s內

注意:隱式等待是全域性的變數 只針對尋找元素 不能針對操作型的動作