环境搭建:
- Node.js
- Android SDK
- JDK
- 安卓模拟器
- appium-desktop
- Maven
- IDE - Intellij
开始搭建吧!
- 安装Node.js(Appium是使用Node.js平台编写的“HTTP服务器” ,使用Webdriver JSON有线协议驱动iOS和Android会话。因此,在初始化Appium Server之前,必须在系统上预安装Node.js)。安装版本:v10.15.1 地址:https://nodejs.org/download/release/, 选择node-v10.15.1-x64.msi 版本
验证是否已经安装成功,在dos界面输入命令:node -v, 如图: - 下载Android SDK (这里也可以直接下载android studio),下载地址:http://tools.android-studio.org/index.php/sdk , 下载.exe文件后,一步步默认安装即可
- 编辑两个坏境变量:
变量名:ANDROID_HOME , 值:sdk安装路径,比如我的:C:\Users\herby\AppData\Local\Android\android-sdk
并在环境变量Path后面追加:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;
安装完成了后,sdk目录下含有tools,platform-tools 需要自行到 Android SDK manager ,对默认下载项全部下载。
验证是否安装成功,输入命令行:adb ,显示如图:
3. JDK安装:下载JDK1.8版本,直接在官网下载
设置坏境变量:
- 环境变量名:JAVA_HOME, 值:JDK安装路径,如:C:\Program Files\Java\jdk1.7.0_01
- 变量名: CLASSPATH, 值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 环境变量Path,值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
验证JDK是否安装成功,输入: java -version, 结果如图
- 安装安卓模拟器,我选择的是网易mumu(sdk自带的模拟器一直黑屏,目前还没有解决,难受。)下载地址:http://mumu.163.com/ ,安装一直点下一步即可,安装完成,可以测试下adb连接模拟器, 在dos界面输入命令:adb connect 127.0.0.1:7555 , 成功如下图:我之前已经连接过了,所以它提示已经连接了
- 安装appium-desktop, 下载地址:https://github.com/appium/appium-desktop/releases ,选择合适的版本,比如:appium-desktop-Setup-1.2.4.exe ,我下载是1.8.2 版本,下载安装一键完成,然后启动appium,如下图
点击启动,在点击start inspector session(右上角搜索图标),设置Desired capabilities,可以把自己定义好的保存下来,方便下次使用,不然关闭后就会消失掉。
点击Start Session 按钮,成功入下图:这里,我用小米便签做测试app
Desired Capabilities基本的设置如下:
设置参考官网:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md - 配置Maven:http://maven.apache.org/ 下载之后解压,放在一个指定目录:
设置环境变量 :
- 变量名:MAVEN_HOME, 值:maven所在路径
- 变量名:Path,值:%MAVEN_HOME%\bin
验证是否配置成功,输入命令: mvn -v
maven本地仓库设置:打开Maven 的文件夹,打开conf->settings.xml,配置本地仓库地址,不修改则默认为C盘用户目录下的m2文件,可设置自己本地仓库存放的地址
设置仓库的镜像,在setting.xml文档中添加:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
如图:
7. 安装Intellij ,官网一键安装即可。
到此环境搭建完毕。
接下来,创建maven的工程文件,开始编写自动化脚本
- 新建工程:
选择maven,填入groudId等 一直next即可,建好如下图: - 添加自动化所需的依赖,写入pom.xml 文件
<dependencies>
<!--appium依赖-->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>4.1.2</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.1.0</version>
</dependency>
<!--testng-->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0-beta1</version>
<scope>test</scope>
</dependency>
<!--防止出现 Injector NoClassDefFoundError 的错误 -->
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
- 下载TestNG插件, settings > Plugins > 搜搜testng, 选中,点击OK
下载好并安装,右击工程文件,就会出现下图菜单:
从现在开始,我们开始编辑脚本。
- 首先编写一个基础class(Basic.java),配置启动被测app
package util;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeClass;
import java.net.MalformedURLException;
import java.net.URL;
public class Basic{
public static AppiumDriver driver;
@BeforeClass
public void setUp() throws InterruptedException, MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "6.0.1");
capabilities.setCapability("appPackage", "com.xiaomi.notes");
capabilities.setCapability("app", "C:\\Users\\herby\\Downloads\\xiaomiNotes.apk");
capabilities.setCapability("clearSystemFiles", true);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities );
Thread.sleep(2000);
}
}
- 为了定位元素,创建 BasicPage.java,我们用selenium的PageFactory.initElements()方法进行初始化PageObject
package Pages;
import org.openqa.selenium.support.PageFactory;
import util.Basic;
public class BasicPage {
public BasicPage() {
//Initialize PageObject
PageFactory.initElements(Basic.driver, this);
}
}
- 创建Page.java,继承BasicPage类,对元素进行初始化
package Pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
public class HomePage extends BasicPage {
@FindBy(xpath = "//android.widget.ImageButton[@resource-id = 'com.xiaomi.notes:id/notelist_MenuBar_Add']")
public WebElement btnOfAdd;
}
- 编写测试脚本 addnotes.java, 继承Basic 类,case:打开笔记app,点击Add按钮
package TestCase;
import Pages.HomePage;
import org.testng.annotations.Test;
import util.Basic;
public class TC01_AddNotes extends Basic {
HomePage homePage;
@Test
public void AddNotes(){
homePage = new HomePage();
homePage.btnOfAdd.click();
}
}
- 运行脚本,运行前,确保adb已经连接模拟器,appium已启动。