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內
注意:隱式等待是全局的變量 只針對尋找元素 不能針對操作型的動作