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内

注意:隐式等待是全局的变量 只针对寻找元素 不能针对操作型的动作

猜你喜欢

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