app自动化环境搭建之Appium

Posted 麦兜的秘密花园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了app自动化环境搭建之Appium相关的知识,希望对你有一定的参考价值。

app自动化环境搭建Appium

 

1. 安装node.js

(1) 安装node.js

我的电脑是64位的,选择64位的安装包

 

(2) 验证安装node.js是否安装成功

运行--> cmd-->  输入 node -v ,显示版本号,说明安装成功;若安装失败,检查电脑版本是否与安装版本一致

 

2.配置android SDK环境

(1) 下载adb压缩包,并解压到D盘根目录

adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过ADB我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。

我的电脑是64位,所以下载64位的adb

 

 

 

(2) 系统变量--->新建  ANDROID_HOME

D:\adt-bundle-windows-x86_64\sdk

 

 

(3) 系统变量--->编辑  Path -->在末尾增加如下配置

;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

 

(4) 验证Android SDK是否安装成功

 

3.安装Appium

(1) 下载Appium

官网下载地址

https://bitbucket.org/appium/appium.app/downloads/

我的是这个版本

 

(2) 解压Appium安装包,安装Appium

 

 

(3) 配置 Appium 环境变量

系统变量--->编辑  Path -->在末尾增加如下配置

;D:\Program Files (x86)\Appium\node_modules\.bin

 

(4) 验证Appium 是否安装成功

输入appium-doctor (中间没有空格) 检查appium 做自动化需要依赖的环境ANDROID_HOME,JAVA_HOME等是否都已准备好

 

4. 开发自动化脚本的思路

(1) 添加配置

 

deviceName

打开夜神模拟器

打开命令行窗口,输入adb devices

 

 

appPackage

打开夜神模拟器

 

 

打开夜神模拟器 - 微信- 点击登录按钮 (为了拿到登录的appPackage)

 

 

打开命令行窗口,输入 adb shell dumpsys activity | find "mFocusedActivity"

登录的appPackage 就是第三个 com.tencent.mm.ui

 

 

 

appActivity

Activity 就是一个页面

appActivity就是 com.tencent.mm.ui.LauncherUI

 

 

 

(2) 创建驱动

 

详见下图:

 

 

(3) 找到页面元素

进入目录 D:\adt-bundle-windows-x86_64\sdk\tools

执行 uiautomatorviewer.bat

 

 

 

 

 

 

选中页面元素 “登录”按钮,右边找到 resource-id ,相当于javascript中getElementById("cdi")

 

 

 

 

 

 

 

 

 

 

找到提示语对应的id (要和期望值做对比)

 

 

(4) 操作页面元素来模拟用户的操作

 

(5) 通过断言和日志查看测试结果

初步的代码如下,运行报错,

原因是要等待几秒,页面加载,才能拿到页面元素

 

代码详情:

 

package com.ningmeng;

 

import java.net.MalformedURLException;

import java.net.URL;

 

import org.apache.log4j.Logger;

import org.junit.After;

import org.junit.Assert;

import org.junit.Before;

import org.junit.Test;

import org.openqa.selenium.remote.DesiredCapabilities;

 

import io.appium.java_client.AppiumDriver;

import io.appium.java_client.android.AndroidDriver;

 

public class WechatLoginTestDemo {

private AppiumDriver driver;

private Logger logger = Logger.getLogger(WechatLoginTestDemo.class);

@Before

public void init() throws MalformedURLException{

//添加配置(设备编号:deviceNameappappPackageapp打开的第一个界面:appActivity)

DesiredCapabilities desiredCapabilities = new DesiredCapabilities();

logger.info("添加配置");

desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001"); // 在命令窗口中输入   adb devices

desiredCapabilities.setCapability("appPackage", "com.tencent.mm");// 在命令窗口中输入  adb shell dumpsys activity | find "mFocusedActivity"

desiredCapabilities.setCapability("appActivity", "com.tencent.mm.ui.LauncherUI"); // 在命令窗口中输入  adb shell dumpsys activity | find "mFocusedActivity"

//创建驱动

logger.info("创建驱动");

driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); //http://ip:4723/wd/hub (固定写法)

logger.info("成功打开了第一个app界面");

System.out.println("创建完驱动,成功打开了app的第一节界面");

}

 

/**

 * 测试手机号,密码都错误的登录情况

 * 需求文档给出的错误提示信息:“账号信息错误,请重新填写”

 * @throws InterruptedException

 */

@Test

public void test001() throws InterruptedException{

logger.info("**************************WechatLoginTest test001() start************************************");

Thread.sleep(10000);

//找到页面元素

logger.info("找到登录按钮");

driver.findElementById("cdi").click();

//操作页面元素来模拟用户的操作

String mobilephone = "1881398944";

String password = "111111";

logger.info("输入手机号"+mobilephone+",和密码:"+password);

driver.findElementById("brm").sendKeys(mobilephone);

driver.findElementById("gr").sendKeys(password);

logger.info("输入信息后,点击登录按钮");

driver.findElementById("aax").click();

//通过断言和日志来查看测试结果

Thread.sleep(10000);

logger.info("获取提示信息");

String actual = driver.findElementById("br4").getText();

System.out.println("实际值:"+actual);

String expected = "账号信息错误,请重新填写";

logger.info("实际值:"+actual);

logger.info("期望值:"+expected);

String msg = "期望值和实际值一样,没有bug";

try {

Assert.assertEquals(expected, actual);

} catch (AssertionError e) {

msg = "发生异常,真是值和期望值不一致,没有通过测试,发现bug";

}

logger.info(msg);

logger.info("**************************WechatLoginTest test001() end************************************");

}

 

@After

public void finish(){

driver.quit();

logger.info("关闭驱动");

}

 

}

 

 

以上是关于app自动化环境搭建之Appium的主要内容,如果未能解决你的问题,请参考以下文章

APP自动化环境搭建之appium工具介绍

UI自动化测试框架搭建 —— 编写一个APP自动化

XP定位(APP元素定位)

App自动化测试-1.App自动化介绍和环境搭建

APP自动化测试appium环境怎么搭建?

App自动化测试探索MAC环境搭建iOS+Python+Appium测试环境