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")));

很漂亮的一个模板

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