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

相关推荐
Winston Wood25 分钟前
Android Parcelable和Serializable的区别与联系
android·序列化
清风徐来辽30 分钟前
Android 项目模型配置管理
android
帅得不敢出门1 小时前
Gradle命令编译Android Studio工程项目并签名
android·ide·android studio·gradlew
problc2 小时前
Flutter中文字体设置指南:打造个性化的应用体验
android·javascript·flutter
帅得不敢出门12 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
我又来搬代码了14 小时前
【Android】使用productFlavors构建多个变体
android
德育处主任15 小时前
Mac和安卓手机互传文件(ADB)
android·macos
芦半山15 小时前
Android“引用们”的底层原理
android·java
迃-幵16 小时前
力扣:225 用队列实现栈
android·javascript·leetcode
大风起兮云飞扬丶16 小时前
Android——从相机/相册获取图片
android