1. 程式人生 > >Appium-java API詳解

Appium-java API詳解

目前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物件。