app自动化环境搭建之Appium

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述app自动化环境搭建之Appium相关的知识,希望能为你提供帮助。
app自动化环境搭建之Appium
 
1. 安装node.js
【app自动化环境搭建之Appium】(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{
//添加配置(设备编号:deviceName,app:appPackage,app打开的第一个界面: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("关闭驱动");
}
 
}
 
 

    推荐阅读