- Mac电脑在eclipse自带了testNG,所以在此特别说明下,在Windows电脑系统中使用Java+appium做断言,需要使用第三方插件testNG,所以就要在eclipse安装testNG,安装步骤见eclipse安装testNG
- 1、首先保证安装了testNG
- 2、右击项目---->选择testNG--->Convert to testNG
![](https://img-blog.csdnimg.cn/img_convert/e70ea500647683c204e76eb4b4bb7b88.png)
- 点击后会出现一下的窗口,直接点击下一步 Next >
![](https://img-blog.csdnimg.cn/img_convert/baa8bc90b965427094fb52d333230eef.png)
- 可以直接点击勾选做出改变,也可以后面做出改变
![](https://img-blog.csdnimg.cn/img_convert/c54f805047dc20608c0d2fdc992a7b9d.png)
- 点击testNG后会多出一个testng.xml
![](https://img-blog.csdnimg.cn/img_convert/106107c523ad9db0fdbe536b8b375271.png)
- testng.xml是testNG的一个核心配置文件
![](https://img-blog.csdnimg.cn/img_convert/024d1039411f6215664e6cd94ddf2893.png)
- 使用testNG需要做初始化操作,和Python里的一样,就是setUp()和tearDown()方法
![](https://img-blog.csdnimg.cn/img_convert/ca39980129198acb10c8622a87c3e159.png)
- 一下是详细代码
package com.test.firsAppium;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;//包名
import java.net.MalformedURLException;import java.net.URL;
//第三方依赖包import org.openqa.selenium.WebElement;
//导入 selenium 包中的WebElement模块
import org.openqa.selenium.remote.DesiredCapabilities;
//导入 selenium 包中的remote.DesiredCapabilities模块
import io.appium.java_client.android.AndroidDriver;
//导入appium 的依赖包 java_client
public class AppuimTest {
// 定义变量属性
androidDriver public static AndroidDriver<WebElement> androidDriver; @BeforeTest //代表着初始化动作
public void setUp() throws MalformedURLException, InterruptedException { // 1、创建配置对象
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
// 添加配置
// deviceName:可以找到我们测试的设备本地的127.0.0.1:62001,b672fcc5手机链接设备名称,端口好5555
desiredCapabilities.setCapability("deviceName", "b672fcc5:5555");
// platformName:测试平台
Android or IOS desiredCapabilities.setCapability("platformName", "Android"); // 获取包名,找到要测试的
App appPackage desiredCapabilities.setCapability("appPackage", "com.handsgo.jiakao.android");
// automationName: uiautomator2来解决输入框输不了数据的
// 自动化引擎
desiredCapabilities.setCapability("automationName", "uiautomator2");
// appActivity:测试app启动入口
desiredCapabilities.setCapability("appActivity", "com.handsgo.jiakao.android.splash.Login");
// 3、创建驱动 // 传入两个参数 // 第一个参数:appium通信地址 // 第二个参数配置对象
androidDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
// 调用自定义方法 //不需要调用testJiakao();会自带调用 }
@Test //代表的是一个方法
public void testJiakao() throws InterruptedException {
// 设置等待时间 Thread.sleep(10000);
// 点击启动程序会弹出遮罩层让我们选择,点击我知道 androidDriver.findElementById("com.handsgo.jiakao.android:id/permission_btn").click();
// 1、找到定位城市文本,并且点击,(使用SDK自带的定位元素作为辅助功能定位元素的识别方式) androidDriver.findElementById("com.handsgo.jiakao.android:id/select_text").click();
// 2、找到城市搜索框,并输入 "长沙" androidDriver.findElementById("com.handsgo.jiakao.android:id/edt_search_q").sendKeys("长沙");
// 3、找到搜索结果中的"长沙",并且点击 androidDriver.findElementById("com.handsgo.jiakao.android:id/item_title").click();
// 4、点击长沙后回到首页,点击小车
Thread.sleep(1000); androidDriver.findElementById("com.handsgo.jiakao.android:id/item_car").click();
// 5、找到"下一步"并且点击 androidDriver.findElementById("com.handsgo.jiakao.android:id/ok_button").click();
// 跳转页面可能需要等待,所以设置等待时间
Thread.sleep(2000);
// 6、点击男士 androidDriver.findElementById("com.handsgo.jiakao.android:id/gender_male_btn").click();
// 7、点击未报名驾校 androidDriver.findElementById("com.handsgo.jiakao.android:id/jiakao_not_sign_up_btn").click();
// 8、点击纯为拿本 androidDriver.findElementById("com.handsgo.jiakao.android:id/naben_btn").click();
// 9、点击下一步 androidDriver.findElementById("com.handsgo.jiakao.android:id/btn_next").click(); }
//初始化完成后,我们还需要一个销毁动作
@AfterTest
public void tearDown(){
//当测试用例执行完毕后,我们需要销毁驱动
androidDriver.quit(); }
}
- 选择右击执行代码testNG运行
![](https://img-blog.csdnimg.cn/img_convert/dff56278725073578a944de1a2b2f428.png)
- 上述代码执运行结果如下,没带断言
![](https://img-blog.csdnimg.cn/img_convert/0dc42befe790a7ab5ec5bc4896e3d4c5.png)
- 断言就是测试脚本的一个最重要的部分,没有断言就相当于程序没有灵魂,下面是加了简单断言的代码:
package com.test.firsAppium;
import org.testng.Assert;import org.testng.annotations.AfterTest;import org.testng.annotations.BeforeTest;import org.testng.annotations.Test;//包名import java.net.MalformedURLException;import java.net.URL;
import org.aspectj.lang.annotation.After;//第三方依赖包import org.openqa.selenium.WebElement;//导入 selenium 包中的WebElement模块import org.openqa.selenium.remote.DesiredCapabilities;//导入 selenium 包中的remote.DesiredCapabilities模块
import io.appium.java_client.android.AndroidDriver;//导入appium 的依赖包 java_client
public class AppuimTest { // 定义变量属性 androidDriver public static AndroidDriver<WebElement> androidDriver;
@BeforeTest // 代表着初始化动作 public void setUp() throws MalformedURLException, InterruptedException { // 1、创建配置对象 DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); // 添加配置 // deviceName:可以找到我们测试的设备本地的127.0.0.1:62001,b672fcc5手机链接设备名称,端口好5555// desiredCapabilities.setCapability("deviceName", "b672fcc5:5555"); desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001"); // platformName:测试平台Android or IOS desiredCapabilities.setCapability("platformName", "Android"); // 获取包名,找到要测试的App appPackage desiredCapabilities.setCapability("appPackage", "com.handsgo.jiakao.android"); // automationName: uiautomator2来解决输入框输不了数据的 // 自动化引擎 desiredCapabilities.setCapability("automationName", "uiautomator2"); // appActivity:测试app启动入口 desiredCapabilities.setCapability("appActivity", "com.handsgo.jiakao.android.splash.Login"); // 3、创建驱动 // 传入两个参数 // 第一个参数:appium通信地址 // 第二个参数配置对象 androidDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); // 调用自定义方法 // 不需要调用testJiakao();会自带调用 }
@Test // 代表的是一个方法 public void testJiakao() throws InterruptedException { // 设置等待时间 Thread.sleep(10000); // 点击启动程序会弹出遮罩层让我们选择,点击我知道 androidDriver.findElementById("com.handsgo.jiakao.android:id/btn_agree").click(); Thread.sleep(10000); // 1、找到定位城市文本,并且点击,(使用SDK自带的定位元素作为辅助功能定位元素的识别方式) androidDriver.findElementById("com.handsgo.jiakao.android:id/cityTv").click(); // 2、找到城市搜索框,并输入 "长沙" Thread.sleep(10000); androidDriver.findElementById("com.handsgo.jiakao.android:id/edt_search_q").sendKeys("长沙"); // 3、找到搜索结果中的"长沙",并且点击 Thread.sleep(10000); androidDriver.findElementById("com.handsgo.jiakao.android:id/item_title").click(); // 4、点击长沙后回到首页,点击小车 Thread.sleep(1000); androidDriver.findElementById("com.handsgo.jiakao.android:id/itemCar").click(); // 5、找到"下一步"并且点击// Thread.sleep(1000);// androidDriver.findElementById("com.handsgo.jiakao.android:id/ok_button").click(); // 跳转页面可能需要等待,所以设置等待时间 //Thread.sleep(1000); // 6、点击男士 androidDriver.findElementById("com.handsgo.jiakao.android:id/maleTv").click(); // 7、点击未报名驾校 androidDriver.findElementById("com.handsgo.jiakao.android:id/unRegisterTv").click(); // 8、点击纯为拿本 //androidDriver.findElementById("com.handsgo.jiakao.android:id/naben_btn").click(); // 9、点击下一步 androidDriver.findElementById("com.handsgo.jiakao.android:id/okBtn").click(); // 点击下一步时可能需要时间等待加载 Thread.sleep(1000); // 10、断言 String expected = "cn.mucang.android.mars.student.refactor.business.inquiry.activity.InquiryActivity"; String actual = androidDriver.currentActivity(); // testNG断言 Thread.sleep(1000); Assert.assertEquals(actual, expected);
} // 初始化完成后,我们还需要一个销毁动作 @AfterTest public void tearDown() { // 当测试用例执行完毕后,我们需要销毁驱动 androidDriver.quit(); }
}
- 断言
![](https://img-blog.csdnimg.cn/img_convert/158d0d9a39da1eb40ecc05b2c0b264b2.png)
- 运行结果为:
![](https://img-blog.csdnimg.cn/img_convert/e0ba815e52928098492062ffa3a377f2.png)
- 查看断言是否是正确的
![](https://img-blog.csdnimg.cn/img_convert/2676b486c31350a697e6b4d481e0e129.png)