一、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")));
很漂亮的一个模板