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接口自动化测试进阶教程合集,真实模拟企业项目实战

相关推荐
TimeFine3 小时前
AI 编码工作流的设计
android·ai编程
骑着蜗牛撵大象3274 小时前
C++20 协程 × 屏障:手写一个 co_await 版 Barrier,让等待不再钉死线程
android·c++20·协程·并发编程·co_await·屏障同步
山东孙燕姿5 小时前
设备台账重构:从一张表到三层模型
android·java·网络·低代码·重构·rxjava
蒸鱼Yuzheng6 小时前
移动端 CPU 调度分析:线程亲和性、大小核迁移与卡顿
android·perfetto·性能分析·线程优化·cpu调度
booboosui6 小时前
安卓唤醒词:12 维 MFCC 加 DTW,阈值 1.8
android
传奇开心果6 小时前
Compose Multiplatform 共享边界实战:架构契约、互操作同步与可回退设计
android·kotlin
事圆则缓7 小时前
从开机到首帧:Android 系统与应用启动流程源码分析
android
AI吃大瓜7 小时前
指针压力表读数4:Android实现指针压力表读数(可实时检测)
android·指针读数·指针压力表·压力表·压力表读数
fengci.7 小时前
CTF2刷题记录(困难部分)
android·开发语言·前端·学习·php
hunterandroid8 小时前
[Android 从零到一] ARouter 路由框架原理:APT 生成路由表与组件化通信
android