一、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、微信-》聯繫人-》公衆號-》愛心籌-》我的籌款-》我要提現
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")));
很漂亮的一個模板