appium_java環境搭建

一、jdk安裝:

1、配置環境變量:

電腦--屬性--高級--環境變量

新建系統變量:

變量名:JAVA_HOME   路徑:C:\Program Files\Java\jdk1.8.0_171

變量名:CLASSPATH        .;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;

選擇“系統變量”中變量名爲path的環境變量,雙擊該變量,把jdk安裝路徑中的bin目錄的絕對路徑,添加到path變量的值中;

C:\Program Files\Java\jdk1.8.0_171\bin

變量名path  變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

驗證配置是否成功:控制檯輸入java -version,如果顯示Java版本信息表示安裝成功。

二、nodejs安裝,node-v4.4.5-x64-64位.msi默認安裝即可;appium源碼是用nodejs寫的;

三、Appium安裝, appium-desktop-Setup-1.2.7.exe 默認安裝即可;

下載地址:https://bitbucket.org/appium/appium.app/downloads/

四、eclipse安裝;

eclipse可能需要配置jdk.

windows->preferences

五、itools安卓模擬器安卓;或用夜神模擬器(https://www.yeshen.com/

六、將apk拖拽到模擬器中即可;

七、android-sdk-windows 中運行sdk manager,下載sdk tools和android 版本

運行android sdk manager
①、Tools的勾選圖示選項下載即可。
②、API的任意選擇一個,考慮向下兼容原則,可以下載最新的API。
③、Extras的全選
等待安裝完成就行了

設置android sdk的環境變量

“我的電腦” 右鍵菜單 —> 屬性 —> 高級 —> 環境變量 —> 系統變量 —>、
變量名 變量值
ANDROID_HOME D:\ruanjianpath\android-sdk\android-sdk-windows

變量名 變量值
PATH ;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

然後cmd下輸入adb 出現以上英文即安裝成功

八、開啓手機的開發者模式:設置-》關於手機 android 或內核版本 或版本號連續點擊,直到有開發者模式彈出;

回退上級菜單,看到開發者選項後,開啓usb調試;

 

adb kill-server

adb start-server

adb devices

adb connect ip 真機

如果提示:下圖說明adb版本不匹配;

將D:\ruanjianpath\android-sdk\android-sdk-windows\platform-tools 下的adb.exe替換到

D:\zidonghua\itools\ThinkSky\iToolsAVM\tools目錄下即可。

--------------------------------------------------------------------------------------------------------------

創建一個Appium代碼:

一、java工程創建:

1、創建一個java project項目;

2、創建一個lib文件夾:

3、將jar包拷貝到lib目錄下:java-client-1.2.1.jar、selenium-java-2.44.0.jar、selenium-server-standalone-2.44.0.jar

然後右鍵-》build path-》add to build path

4、在src目錄上新建一個Demo1的class文件,勾選public static void main選項;

文件目錄如下:

Demo1.java代碼如下:

//報名稱
package appium_demo;
//引入的類
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.AppiumDriver;

public class Demo1 {
    //定義一個driver
    private static AppiumDriver driver;

    public static void main(String[] args) throws MalformedURLException {
        // TODO Auto-generated method stub
        //new 一個app對象
        DesiredCapabilities capabilities = new DesiredCapabilities();  
        //對象調用方法
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");  
        //平臺
        capabilities.setCapability("platformName", "Android");  
        //模擬器的名稱
        capabilities.setCapability("deviceName","Android Emulator"); 
        //平臺手機的android系統版本一致
        capabilities.setCapability("platformVersion", "4.4.4");  
        
        //包名
        capabilities.setCapability("appPackage", "com.xiaomi.shop");  
        //主入口activity名
        capabilities.setCapability("appActivity", "com.xiaomi.shop.activity.MainTabActivity");  
        
        //不重置數據,如果需要重置的話註釋掉這句
        capabilities.setCapability("noReset", true);
        //隱藏手機中的軟鍵盤,讓手機中可以輸入中文
        capabilities.setCapability("unicodeKeyboard",true);
        capabilities.setCapability("resetKeyboard",true);
        
        //生成一個driver對象
        driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);  
        //停頓時間
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);  

    }

}
 

運行文件即可調通啦。

-----------------------------------------------------------------------------

--------------------------------安裝命令行appium---------------------------------------------------------------------

這個是給持續集成時用的

安裝 cnpm: npm -g install cnpm
安裝 appium: cnpm -g install [email protected]
使用命令 cnpm -g install appium-doctor 安裝 appium-doctor 檢查命令
以上幾步完成後在命令行檢查環境, 分別執行 appium-doctor 和 appium, 出現如下
界面則表示環境搭建成功

--------------------夜神模擬器---------------------------

需要先使用cmd     adb connect 127.0.0.1:62001

原理:

 

------------------------------appium建立與服務端的通信---------------------------------

{
  "platformName": "Android",
  "deviceName": "ss",
  "unicodeKeyboard": true,
  "resetKeyboard": true,
  "newCommandTimeout": 600,
  "udid": "127.0.0.1:62001",
  "appPackage": "com.zhihu.android",
  "appActivity": "com.zhihu.android.app.ui.activity.LauncherActivity",
  "noReset": true,
  "noSign": true
}

點擊start可以將app加載過來,進行調試

----------------------元素定位方式----------------------

content-desc方式

driver.findElement(MobileBy.AccessibilityId("發佈")).click();

text方式

driver.findElement(MobileBy.AndroidUIAutomator("text(\"寫回答\")")).click();

------------------appium調試-------------------

id定位在移動端並不是唯一的,與web端有很大區別;

搜文字使用

代碼裏引號要轉義:text(\"熱榜\")

原生app界面僅支持:id、xpath、uiautomator、accessibilityid、class

 

//顯示等待,判斷提示信息
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[contains(@text, '發佈成功')]")));

 

----------------------------------解決 uiautomatorviewer 不能識別 android 8.0 以上系統------------------------------------------

不能識別 主要原因 爲 uiautomatorviewer 版本太低  , 只要tools 將lib下 ddmlib、ddms、ddmuilib 、uiautomatorviewer這幾個核心jar 進行替換 即可 進行識別定位。uiautomatorviewer 升級後 可以使用xpath 進行定位

---------------------------------手勢解鎖-------------------------------

1、開發者選項中有個指針位置,需要打開

cmd輸入: adb shell dumpsys window windows|findstr "mCurrent"

沒有apk的情況,真機可以使用這種方式,拿到的activity並不一定是起始的activity

起始座標能拿到x,y

第一個點:x+w/6, y+6/h

第二個點:x+3*w/6, y+6/h

第三個點:x+5*w/6, y+6/h

第四個點:x+1*w/6, 3* y+6/h

第五個點:x+3*w/6, 3* y+6/h

第六個點:x+5*w/6, 3* y+6/h

第七個點:x+w/6, 5* y+6/h

第八個點:x+3w/6, 5* y+6/h

第九個點:x+5w/6, 5* y+6/h

//手勢解鎖
    public static void geUnlock(AndroidDriver<AndroidElement> driver, By by, int[] pwd) {
        //大框元素
        AndroidElement lockview= driver.findElement(by);
        int start_x = lockview.getLocation().getX(); //起始點x
        int start_y = lockview.getLocation().getY(); //起始點y
        int w = lockview.getSize().getWidth();   //寬
        int h = lockview.getSize().getHeight();  //高
        
        //定義點的集合
        List<PointOption> corLists=new ArrayList<PointOption>();
        //獲取所有的點座標
        for(int i=0; i<3; i++) {//行
            for(int j=0; j<3; j++) {//列
                int x_center = start_x +((2*j+1)*w)/6;
                int y_center = start_y +((2*i+1)*h)/6;
                corLists.add(PointOption.point(x_center, y_center));
            }
            
        }
        
        
        TouchAction action=new TouchAction(driver);
        action.press(corLists.get(pwd[0])).waitAction(WaitOptions.waitOptions(Duration.ofMillis(800))).perform();
            
        for(int i=1;i<pwd.length;i++){
            action.moveTo(corLists.get(pwd[i])).waitAction(WaitOptions.waitOptions(Duration.ofMillis(800))).perform();
        }
        action.release().perform();
    
    
    }

 

InitDriver.geUnlock(driver, By.id("com.pa.health:id/patter_lock_view"), new int[] {0, 1, 2, 6, 8, 7, 5});

注意:8.0.1的系統執行需要加perform 表示執行, 貌似9.0以上版本不需要加,執行失敗時關注。

----------------------------------------微信公衆號H5頁面-----------------------------------

1、微信任意窗口打開  debugtbs.qq.com

2、微信-》聯繫人-》公衆號-》愛心籌-》我的籌款-》我要提現

3chrome://inspect/#devices

a標籤定位用Linktest

微信66.0.3359.126對應的chromdriver是2.40

MobileBy是By的子類,移動端特有的定位需要用到MobileBy,如:MobileBy.AndroidUIAutomator或者assisebilityid

愛心籌的H5 contexts切換不了, 發現H5頁面強轉爲原生界面了,後面就不需要切換context了。可能是安卓版本的問題,不好確認原因。

小程序需要用uiautometger1, uiautometger2可能不行。

 

==================allure報告模板==========================

https://docs.qameta.io/allure/

allure-commandline-2.13.0.zip  

下載並解壓;

將allure.bat配置到環境變量path中

命令行如下 表示成功

t將allure 的jar包導入進去,estNg運行完畢後,進入到項目目錄,

命令行進入: D:\zidonghua\eclipse_new\eclipse\case\AutoTestMTX1019

D:\zidonghua\eclipse_new\eclipse\case\AutoTestMTX1019>allure serve

生成報告

 

 

 

失敗截圖:

//allure失敗截圖
            Allure.addAttachment("失敗截圖", new FileInputStream(new File("images/Zhihulogoutfailure.png")));

很漂亮的一個模板

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章