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

相关推荐
Kapaseker1 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴1 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android