使用android studio+java+appium进行自动化测试
一、准备好需要安装的软件
1.JDK
2.sdk
3.android studio
4.appium 最新版为1.10.0
5.安卓模拟器或真机
6.一些需要的jar包,添加方式下文详细说明
二、环境变量
1.JDK
安装好JDK之后,进行环境变量配置
classpath中:
变量名:%JAVA_HOME%
变量值:C:\Program Files\Java\jdk1.8.0_131 (找到自己jdk安装路径即可)path中:
%JAVA_HOME%\bin;
2.SDK
将sdk解压到某个盘,sdk的路径不要包含中文。
classpath中:
变量名:%Android_Home%
变量值:D:\Android\androidsdk (此处是自己的安装路径)
在path中添加:
%Android_Home%\platform-tools;%Android_Home%\tools;
3.android studio
这个直接安装就可以了,可以安装到其他盘,不一定是C盘
4.appium
直接点击安装,安装完成后
classpath中:
变量值:APPIUM_HOME
变量名:C:\Program Files (x86)\Appium
path中:
%APPIUM_HOME%\node_modules.bin
三、使用android studio 编写测试脚本(此处先以运行官方demo为例)
1.创建项目
因为android studio不能直接新建java项目,所以需要先创建一个android项目
最后点击finish,然后应该为这样:
然后new module
选择 java library
此处我创建的是一个名叫demoTest的library
创建完成之后是这样的:
2.项目创建完成之后,需要创建一个文件夹
在项目的java目录下,创建一个名叫apps的文件夹,apps文件夹的目的是存放apk文件。
4.下载官方apk文件:
地址:https://github.com/appium-boneyard/sample-code/blob/master/sample-code/apps/ContactManager/ContactManager.apk
下载好之后,将apk文件放入刚刚创建的apps文件夹中
5.官方例子中有各种测试脚本的例子。官方地址为:
https://github.com/appium-boneyard/sample-code/tree/master/sample-code/examples/java
由于这里需要对官方代码有一些改动,所以我直接粘贴过来,直接复制就行
public class AndroidContactaTest {
private AppiumDriver<AndroidElement> mobiledriver;
private SwipeClass swipe;
@BeforeTest
public void beforeTest( ) throws MalformedURLException {
File classpathRoot = new File(System.getProperty("user.dir"));
//app的目录
File appDir = new File(classpathRoot, "/src/main/java/apps/");
//app的名字,对应你apps目录下的文件
File app = new File(appDir, "ContactManager.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
//appium的版本
capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "1.10.0");
//android系统的版本
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "5.1.1");
//系统
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME,"Android");
//
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME,"Appium");
//设备名称 模拟器名称
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "yyf");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
//设置app的包名
capabilities.setCapability("appPackage", "com.example.android.contactmanager");
//设置app的启动activity
capabilities.setCapability("appActivity", ".ContactManager");
capabilities.setCapability("newCommandTimeout", 2000);
//此处的地址是appium中的host地址,可以自己修改,只要与appium对应就可以
mobiledriver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@AfterTest
public void afterTest( ) {
mobiledriver.quit();
}
/**
* 要执行的的测试方法
*/
@Test
public void addContact(){
//利用Xpath的方法寻找text值为Add Contact的控件
WebElement el = mobiledriver.findElement(By.xpath(".//*[@text='Add Contact']"));
//点击这个控件
el.click();
//利用类名获取界面上所有的EditText
List<AndroidElement> textFieldsList = mobiledriver.findElementsByClassName("android.widget.EditText");
//第一个EditText输入内容Some Name
textFieldsList.get(0).sendKeys("Some Name");
//第三个EditText输入内容Some Name
textFieldsList.get(2).sendKeys("Some@example.com");
//在坐(100,500)滑动到(100,100) 时间为2毫秒
swipe.swipeToDown(mobiledriver);
//用xpath的方式寻找到text值为Save的控件,然后点击
mobiledriver.findElementByXPath(".//*[@text='Save']").click();
}
}
直接复制粘贴就好,由于appium 1.10不支持swipe滑动来定义坐标,所以我们需要自己创建一个类,我创建的类名为SwipeClass
对应的代码为:
public class SwipeClass {
static Duration duration=Duration.ofSeconds(1);
public void swipeToUp(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action1=new TouchAction(driver).press(PointOption.point(width/2, height*3/4)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/2, height/4)).release();
action1.perform();
}
public void swipeToDown(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action2=new TouchAction(driver).press(PointOption.point(width/2, height/4)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/2, height*3/4)).release();
action2.perform();
}
public void swipeToLeft(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action3=new TouchAction(driver).press(PointOption.point(width*3/4, height/2)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width/4,height/2)).release();
action3.perform();
}
public void swipeToRight(AppiumDriver driver) {
int width = driver.manage().window().getSize().width;
int height = driver.manage().window().getSize().height;
TouchAction action4=new TouchAction(driver).press(PointOption.point(width / 4, height / 2)).waitAction(WaitOptions.waitOptions(duration))
.moveTo(PointOption.point(width*3/4,height/2)).release();
action4.perform();
}
}
现在发现代码中会有一些错误,原因是因为我们没有导入需要的jar包。接下来我们开始导入jar包
6.jar包导入
File--->project sturcture
点击+号,选择第一个,第一个是从网络加载
现在我们需要3个jar包
在搜索框中输入appium,进行搜索
在搜索框中输入testng进行搜索
在搜索框中输入selenium进行搜索
然后点击ok.加载之后再在错误上点击ALT+ENTER 将包导入
7.启动appium
此时代码准备就绪,启动appium
此处host与上文代码中的地址保持一致,点击start server 1.10.0
启动成功
8.开始运行脚本
连上手机或者模拟器,运行脚本
可以点击这个按钮运行
也可以在AndroidContacatTest文件点击右键,选择run AndroidContacatTest 运行