Appium+Java環境搭建及簡單實例
一、下載jdk並配置好環境
二、下載Android-sdk並配置好環境
三、下載Eclipse軟件
四、下載Node.js
下載地址:https://nodejs.org/en/download/,或者雲盤上下載:node-v12.16.3-x64.msi
傻瓜式安裝即可,如果改變的安裝路徑,需要要配置npm參數,把命令當中的路徑換成實際路徑,打開cmd,操作如下:
npm config set prefix=“D:\Program Files\nodejs\node_global”
npm config set cache=“D:\Program Files\nodejs\node_cache”
npm config set init-module=“D:\Program Files\.npm-init.js”
npm config set registry=“https://registry.npm.taobao.org/”
npm config set tmp=“D:\Program Files\Temp”
npm config set userconfig=“D:\Program Files\.npmrc”
安裝完成後進行驗證,cmd:node -v
五、Appuim下載
Appium 目前託管在github,正確的Appuim下載地址:https://github.com/appium/appium-desktop/releases/tag/v1.12.1,或者雲盤上下載
*安裝完成後,需要配置路徑,將node_modules.bin目錄放到系統path環境下,即將路徑D:\Program Files (x86)\Appium\node_modules.bin添加到環境變量path中去。 *(視情況而定,本次實驗未做此操作)
選中第一個desktop桌面版的,有元素定位、錄製等操作。
cmd下執行命令npm install -g appium-doctor (視情況而定,此實驗未做此操作)
六、Appium操作
1、啓動程序,點擊下方按鈕啓動軟件
2、顯示啓動成功,點擊紅圈啓動檢查器會話
3、啓動adb,檢查是否有設備接入
4、查看appium啓動的頁面,並在右下角編輯輸入需要的信息,保存,左上角選中自動啓動服務。頁面效果如下:
其中需要填入的信息如下:
“platformName”: “Android”, #系統
"platformVersion ": “10”, #系統版本
“deviceName”: “xx”, #手機名稱
“appPackage”: “xx.xx.xxxt”, #軟件安裝包Package
“appActivity”: “xx.xx.xxxxxxxx”#軟件安裝包Activity
“App”: “D:\xx.apk” #手機安裝包路徑,如果手機有安裝,可以不添加
5、點擊右下角啓動session,此時手機端要保證可以安裝程序Appium Setting,
6、啓動後頁面效果如下,其中最上方紅圈爲錄製操作,紅圈最左側的向右的箭頭是滑動操作,右側的紅圈爲點擊發送事件操作:
7、啓動錄製後,點擊右上角展示詳細代碼:
七:Eclipse+java操作
1、啓動Eclipse軟件,並創建java project項目,創建JUnit Test Case,選擇junit 4,並在完成的時候導入所有的junit 4 的包
2、編寫代碼前導入三個jar包,雲盤上有,也可http://selenium-release.storage.googleapis.com/index.html這裏下載
3、可以自己編寫代碼,可以複製錄製操作的代碼,如下:
import static org.junit.Assert.*;
import org.junit.Test;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidDriver;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Sleeper;
public class appium {
private AndroidDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability("platformName", "Android");
desiredCapabilities.setCapability("platformVersion", "10");
desiredCapabilities.setCapability("deviceName", "XXXXXXXXXXXXX");
desiredCapabilities.setCapability("appPackage", "com.android.deskclock");
desiredCapabilities.setCapability("appActivity", "com.android.deskclock.AlarmsMainActivity");
URL remoteUrl = new URL("http://localhost:4723/wd/hub");
driver = new AndroidDriver(remoteUrl, desiredCapabilities);
System.out.println("程序啓動");
}
@Test
public void sampleTest() throws InterruptedException {
MobileElement el1 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.ListView/android.widget.FrameLayout[1]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Switch");
el1.click();
Thread.sleep(1000);
MobileElement el2 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout[1]/android.widget.ListView/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Switch");
el2.click();
Thread.sleep(1000);
System.out.println("程序執行完成");
}
@After
public void tearDown() {
driver.quit();
System.out.println("已退出程序");
}
}
4、如手機端未安裝apk,可在項目中創建app存放的文件夾,aa,並在@before中加入代碼:
// 獲取當前程序的路徑
File classpathRoot = new File(System.getProperty("user.dir"));
// 獲取apps文件
File appDir = new File(classpathRoot, "app存放的文件夾名稱");
// 獲取apk文件
File app = new File(appDir, "xx.apk");//apk名稱
5、啓動程序中可加入捕獲異常操作:
try {
driver = new AndroidDriver<>(new URL("http://localhost:4723/wd/hub"), desiredCapabilities);
} catch (MalformedURLException e) {
e.printStackTrace();
}
6、可參照類似於selenium的api進行元素獲取並操作:
WebElement xx = driver.findElement(By.id("xx"));
xx.click();
7、每次運行不安裝app
capabilities.setCapability("noReset", "true");
capabilities.setCapability("fullReset", "false");
每次運行不安裝app,Python代碼類似
caps["noReset"]="true";
caps["fullReset"]="false";
8、允許中文輸入
capabilities.setCapability("unicodeKeyboard", "true");
capabilities.setCapability("resetKeyboard", "true");
9、若真機app啓動失敗,可以考慮是否是安裝包加固引起的,可採用方法是不讓appium對apk進行重簽名
capabilities.setCapability("noSign","true")
python類似:
caps["noSign"]="true";