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内
注意:隐式等待是全局的变量 只针对寻找元素 不能针对操作型的动作