Java + Selenium + Appium手机自动化测试

一、启动Android模拟器(Genymotion俗称世界上最快的模拟器,可自行百度安装)

二、启动Appium(Appium环境安装可自行百度)

三、安装应用到Genymotion上,如下图我安装一个计算机的小应用,包名为CalcTest.apk

安装步骤:(基于Android SDK已经配置好了环境变量,可自行百度)
1、Win + R
2、CMD
3、adb devices   --检查操作,列出存在的设置名称
4、adb  install  F:\Appium\CalcTest.apk     --正式安装App

如下图:192.168.229.101:5555就是我刚开启的Genymotion虚拟机

四、安装成功之后回到Genymotiong可以看到已经安装成功了

打开该应用,可以看到实际是个简单的计算器

五、打开Eclipse创建Maven项目并使用uiautomatorviewer工具(Android SDK工具包自带的)进行基本元素定位操作
1、打开Android SDK可找到路径:android-sdks\tools如下(获取App包名可反编译:aapt dump badging apk路径)

2、打开uiautomatorviewr.bat


3、编写基本代码如下仅供参考:

package appium_demo;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;

import io.appium.java_client.android.AndroidDriver;
/** * @author 李小卫 E-mail:[email protected] @date 创建时间2018年2月11日上午10:10:02 */
public class calc_demo {

	public static void main(String[] args) throws MalformedURLException {
		AndroidDriver driver;
		DesiredCapabilities des = new DesiredCapabilities();
  //	des.setCapability("automationName", "Appium");//Selendroid //自动化的模式选择
 //		des.setCapability("app", "C:\\software\\CalcTest.apk");//配置待测试的apk的路径
//		des.setCapability("browserName", "chrome");  //h5
		des.setCapability("platformName", "Android");//平台名称
		des.setCapability("platformVersion", "4.4");//手机操作系统版本
		des.setCapability("udid", "192.168.229.101:5555");//连接的物理设备的唯一设备标识
		des.setCapability("deviceName", "S4");//使用的手机类型或模拟器类型  UDID

		des.setCapability("appPackage", "com.sky.jisuanji");//App安装后的包名,注意与原来的CalcTest.apk不一样
		des.setCapability("appActivity", ".JisuanjizixieActivity");//app测试人员常常要获取activity,进行相关测试,后续会讲到

		des.setCapability("unicodeKeyboard", "True");//支持中文输入
		des.setCapability("resetKeyboard", "True");//支持中文输入
		des.setCapability("newCommandTimeout", "10");//没有新命令时的超时时间设置
		des.setCapability("nosign", "True");//跳过检查和对应用进行 debug 签名的步骤

		driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), des);//虚拟机默认地址
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//设置超时等待时间,默认250ms
		driver.findElement(By.id("com.android.calculator2:id/digit1")).click();//定位‘1‘
		driver.findElement(By.id("com.android.calculator2:id/plus")).click();//定位‘+‘
		driver.findElement(By.id("com.android.calculator2:id/digit6")).click();//定位‘6‘
		driver.findElement(By.id("com.android.calculator2:id/equal")).click();//定位‘=‘
	}

}   

六、使用TestNG编写正式测试用例并开始执行测试了

package appium_operate;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;
/** * @author 李小卫 E-mail:[email protected] @date 创建时间2018年2月11日上午10:30:02 */
public class CalcTest {
	AndroidDriver driver;
	@BeforeTest
	public void setUp() throws MalformedURLException{
		DesiredCapabilities des = new DesiredCapabilities();
//		des.setCapability("app", "c:\\");
		des.setCapability("platformName", "Android");
		des.setCapability("platformVersion", "4.4");
		des.setCapability("udid", "192.168.43.101:5555");
		des.setCapability("deviceName", "s4");
		des.setCapability("appPackage", "com.android.calculator2");//com.android.contacts
		des.setCapability("appActivity", ".Calculator");//.activities.PeopleActivity
		des.setCapability("unicodeKeyboard", "True");
		des.setCapability("resetKeyboard", "True");
		des.setCapability("newCommandTimeout", "15");
		des.setCapability("nosign", "True");
		driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),des);
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	}
    @Test(enabled = false)
    public void add() {
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘5‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘+‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘8‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘=‘]")).click();
    	String value = driver.findElement(By.xpath("//android.widget.EditText[@class=‘android.widget.EditText‘]")).getAttribute("text");
    	Assert.assertEquals(value, "13");
    }

    @Test(enabled = false)
    public void sub() {
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘1‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘0‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘-‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘8‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘=‘]")).click();
    	String value = driver.findElement(By.xpath("//android.widget.EditText[@class=‘android.widget.EditText‘]")).getAttribute("text");
    	Assert.assertEquals(value, "2");
    }

    @Test(enabled = false)
    public void mul() {
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘5‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘ב]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘8‘]")).click();
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘=‘]")).click();
    	String value = driver.findElement(By.xpath("//android.widget.EditText[@class=‘android.widget.EditText‘]")).getAttribute("text");
    	Assert.assertEquals(value, "40");
    }

    @DataProvider(name="testdata")
    public Object[][] getData(){
    	return new Object[][]{{"20","80","100","+"},{"90","3","270","×"},{"6","2","3","÷"}};
    }

    @Test(dataProvider = "testdata")
    public void calcTestcase(String num1,String num2,String result,String calcType){
    	for(char num:num1.toCharArray()){
    		driver.findElement(By.xpath("//android.widget.Button[@text=‘"+String.valueOf(num)+"‘]")).click();
    	}
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘"+calcType+"‘]")).click();
    	for(char num:num2.toCharArray()){
    		driver.findElement(By.xpath("//android.widget.Button[@text=‘"+String.valueOf(num)+"‘]")).click();
    	}
    	driver.findElement(By.xpath("//android.widget.Button[@text=‘=‘]")).click();
    	String value = driver.findElement(By.xpath("//android.widget.EditText[@class=‘android.widget.EditText‘]")).getAttribute("text");
    	Assert.assertEquals(value, result);
    }
}

  

原文地址:https://www.cnblogs.com/yyym/p/8427270.html

时间: 2024-08-28 16:45:12

Java + Selenium + Appium手机自动化测试的相关文章

java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离

1.主要介绍介绍Java+Selenium+POM的自动化测试框架的搭建,第一个首先实现代码和账号URL等信息的分离.第二点支持跨浏览器,通过读取配置文件的方式实现. 1)将账号URL等信息添加在properties文件中然后读取 2)编写浏览器类通过去取配置文件实现浏览器的切换 3)测试浏览器类 项目结构: 1.新建一个文件夹将properties文件放在文件夹中内容如下: # browser switcher #browserName = FirefoxbrowserName = Chrom

手机自动化测试:搭建appium手机自动化测试开发环境

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478.poptest已经开始了移动测试开发的课程,在课程中加入了公司的实际案例,学员上课的过程中感觉课程难度很高,我们在想办法保证课程的难度和深度的情况,调整教学方式让学员可以在同样的时间里掌握更深的知识. 本次和大家分享appium的环境搭建. 第一步:安装appium,我安装的是<AppiumForWindows-1.0.0.3

Java&amp;Selenium&amp;TestNG&amp;ZTestReport 自动化测试并生成HTML自动化测试报告

一.摘要 本篇博文将介绍如何借助ZTestReport和HTML模版,生成HTML测试报告的ZTestReport 源码Clone地址为 https://github.com/zhangfei19841004/ztest,其中ZTestReport.java 和其template是我们需要的关键. 二.ZTestReport.java 根据我的需要,在源码基础上进行了稍微修改,其中几个注释的地方需要注意,将其集成进自己的自动化框架时需要做相应的修改 package util; import co

java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能

1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOException;import java.util.concurrent.TimeUnit; import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.openqa.selenium

基于Java+Selenium的WebUI自动化测试框架(四)

基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来. package webui.xUtils; import org.openqa.selenium.WebDriver; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.Reporte

基于Java+Selenium的WebUI自动化测试框架(七)--IE浏览器的设置

在上一篇我们讲了关于WebDriver的版本,浏览器初始化,以及下载的设定. 在设置IE浏览器进行WebDriver的测试时,通常会遇见以下几种错误: 1.没有关闭IE浏览器的保护模式. 当运行测试用例后出现类似以下内容的错误: Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Prot

Java+Selenium Web UI自动化测试的一些小总结

- Chrome 关于Chrome的配置网上信息很多,直说一点,当选择在linux环境跑用例的时候,我们会优先选择headless run,默认情况下headless run的浏览器大小好像只有900*768,我们在windows下调通的用例在缩小的串口下经常会失败,最好调一下size: chromeOptions.setHeadless(true); chromeOptions.addArguments("--no-sandbox"); chromeOptions.addArgume

手机自动化测试:appium源码分析之bootstrap十一

手机自动化测试:appium源码分析之bootstrap十一 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478. GetName package io.appium.android.bootstrap.handler; import com.android.uiautomator.core.UiObjectNotFoundException; import io.appium

手机自动化测试:appium源码分析之bootstrap九

手机自动化测试:appium源码分析之bootstrap九 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478. TouchLongClick package io.appium.android.bootstrap.handler; import android.os.SystemClock; import com.android.uiautomator.common.Refl