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

测试apk下载地址:https://files.cnblogs.com/files/yyym/CalcTest.apk

如下图: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、编写基本代码如下仅供参考:

|-------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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:yyymlxw@163.com @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编写正式测试用例并开始执行测试了

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 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:yyymlxw@163.com @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); ``} } |

【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

相关推荐
xiangpanf8 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx11 小时前
安卓线程相关
android
消失的旧时光-194312 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon13 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon13 小时前
VSYNC 信号完整流程2
android
dalancon13 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户693717500138414 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android14 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才15 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶16 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle