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