Appium-java API詳解
阿新 • • 發佈:2019-02-13
目前appium-java最新版本是5.0.0-BETA3,因此就拿最新的說明,以Java為例,首先引入java client的依賴:
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.0-BETA3</version>
</dependency>
API主要分為兩類,分別是元素定位類和模擬操作類。
元素定位類findElementByXX
- driver.findElementById(“id”);
id獲取方法:利用uiautomater截圖,獲取resource id; - driver.findElementByClassName(“className”);
通常通過這種方式獲取的view不止一個,需要遍歷一遍得到的 views,然後根據條件匹配需要的view。 - driver.findElementByName(“text”);
name獲取方法:利用uiautomater截圖,獲取text; - driver.findElementsByLinkText (“text”);
針對webview上元素的超連結 - driver.findElementByXPath(“//*[@name=’62’]”);
舉例,我要定位下圖頁面中的這個元素,我採用xpath定位時,可以這樣寫:
WebElement webElement = driver.findElementByXPath("//android.widget.TextView[contains(@text,'商品描述')]");
webElement.click();
查詢多元素時,直接用相應的findElementsByXX即可。
模擬操作類
- driver.runAppInBackground(5); //將當前活躍的應用放在後臺執行
- driver.hideKeyboard(); //隱藏鍵盤
- driver.lockDevice(); //鎖屏
- driver.openNotifications(); //開啟Android的下拉通知欄
- driver.isAppInstalled(“com.example.android.apis”) //判斷應用是否安裝
- driver.installApp(“path/to/my.apk”) //安裝應用
- driver.removeApp(“com.example.android.apis”) //解除安裝應用
- driver.closeApp() //關閉App
- driver.getContextHandles() //可用上下文,context可以理解為可進入的視窗,如果是native則為native_app,如果是webview為對應webview;
- driver.context(); //設定上下文 (context),對hybrid app會用到
- driver.getAppStringMap(); //獲取應用的字串
- driver.pressKeyCode(AndroidKeyCode.HOME); //給裝置傳送一個按鍵事件,所有鍵盤按鍵值可參考AndroidKeyCode類
- driver.pullFile(“Library/AddressBook/AddressBook.sqlitedb”); //從裝置中拉出檔案
- driver.pullFolder(“Library/AddressBook”); //從裝置中拉出資料夾
- driver.PushFile(“/data/local/tmp/file.txt”, “some data for the file”); //推送檔案到裝置中去
- driver.swipe(75, 500, 75, 0, 0.8) //模擬使用者滑動
- driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(1)); //設定等待時間
- driver.navigate().forward(); // 前進
- driver.navigate().back(); // 後退
- driver.navigate().refresh(); // 重新整理
- driver.currentActivity(); //當前activity,可用於斷言跳轉是否正確
- driver.startActivity(appPackage,appActivity); //啟動其他app的activity
- 座標操作,降低適配帶來的不適用:
double Screen_X = driver.Manage().Window.Size.Width;//獲取手機螢幕寬度
double Screen_Y = driver.Manage().Window.Size.Height;//獲取手機螢幕高度
double startX = element.Location.X; //獲取元素的起點座標,即元素最左上角點的橫座標
double startY = element.Location.Y; //獲取元素的起點座標,即元素最左上角點的縱座標
double elementWidth = element.Size.Width; //獲取元素的寬度
double elementHight = element.Size.Height; //獲取元素的寬度
我對照著看了appium-client的官方文件,然後對著demo演示,發現一些個別API都找不到,查了下資料才發現,問題出現在:
public static AppiumDriver driver;
如果改成這樣就ok了:
public static AndroidDriver driver;
這裡要說下AppiumDriver和AndroiDriver的關係,AndroidDriver已經繼承了AppiumDriver,在AppiumDriver基礎上再封裝一些基本功能。而AppiumDrvier是原生webdriver的子類,所以一些webdriver的方法都是適用的。
因此我推薦適用例項化AndroiDriver物件。