第一个测试用例编写,(Appium+Android+eclipse)本人也很菜才跟着网课学习,上面有一些在学习及安装过程中遇到的问题及其处理方法,希望能帮到各位!!

跟着网课总算看玩了第一个测试用例,附上B站网课地址,我觉得蛮好的,用的就是我目前配的,当然IDEA也可以用。个人学习总结的笔记还有问题,希望能帮到各位。

首先附上网课链接 戳我kan网课和博主一起学习哦

有什么问题欢迎提出,有错误会及时修正,本文章也参考了很多的博文和百度百科,掺杂了个人总结和学习过程及问题和问题的解决方法!

第一个测试用例记录哦

* Maven引入java-client依赖包

www.mavenresipository.com(maven的中央仓库去下载)
复制Maven栏下面的代码加入 pom.xml文件,此文件在你的编译器上 maven环境配置好的话就会有 (注意:最好选择使用人数最多的版本,因为会比较稳定)

* 添加配置(在eclipse里写的)

public static AndroidDriver androidDriver; //声明一个安卓驱动叫androidDriver

public static void main(String[] args) throws MalformedURLException, InterruptedException{

    // 1.创建配置对象

    DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
    
  // 2.添加配置
    //deviceName :可以找到我们的测试设备
    desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
    
    //platformName:测试平台Android or ios
    desiredCapabilities.setCapability("platformName", "Android");
    
    //appPackage:找到要测试的app
    desiredCapabilities.setCapability("appPackage", "com.gengyun.home");
    

	//automationName:uiautomator2来解决输入框输入不了数据
	//自动化引擎(但是还是输不出字)
	desiredCapabilities.setCapability("automationName", "uiautomator2");


    //appActivity:测试app的启动路径
    desiredCapabilities.setCapability("appActivity", "com.gengyun.home.activity.SplashActivity");
	}
  • 创建驱动

      //3.创建驱动
      //传入两个参数
      //第一个参数:Appium通讯地址
      //第二个参数:配置对象
      AndroidDriver<WebElement> androidDriver = new AndroidDriver <WebElement>(
      		new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
    
      			testxinshidai();
      }
      public static void testxinshidai() throws InterruptedException {
      //等待元素加载完毕
      Thread.sleep(10000);
      //由于项目代码跑的较快,所以需要等待他稳定下来这是设置等待秒数为10s
      
      
      
      //1.找到新时代文本,并且点击
      //AndroidDriver<WebElement>  由于声明了所以这个可以去掉
      androidDriver.findElementById("com.gengyun.home:id/tv_tab_title").click();//这个括号内的内容是所捕获页面控件的resource-id
                                                                        //click()是点击事件
      
      //2.到上面搜索栏,输入元宵
      androidDriver.findElementById("com.gengyun.home:id/et_search").click();//先点击再输入
      
      androidDriver.findElementById("com.gengyun.home:id/et_search").sendKeys("元宵");//sendkeys()是输入事件
      
      //3.找到搜索结果中的元宵,并且点击
      androidDriver.findElementById("com.gengyun.home:id/article_title").click();
      
      //可继续执行点击等操作
      
      //4.点击返回标
      androidDriver.findElementById("com.gengyun.home:id/back").click();
      
      //5.继续点击返回标
      		androidDriver.findElementById("com.gengyun.home:id/back_search").click();
      		
      		//跳转到另外一个页面的时候也需要等待几秒,这里设置为两秒
      		Thread.sleep(2000);
      
      }
    
  • 找到页面元素(由于打不开我是直接用appium自带的那个来看的)

    运行uiautomatorviewer,连接真机,定位手机上的元素,发现报错‘ unexpected error while obtaining UI hierarchy ’

解决办法:

1、连接手机,手机滑到需要定位的画面
2、控制台输入下面的命令
 adb shell uiautomator dump /sdcard/app.uix
 
 adb pull /sdcard/app.uix D:/app.uix
 
 adb shell screencap -p  /sdcard/app.png
 
 adb pull /sdcard/app.png D:/app.png

* 操作页面元素来模拟用户的操作

  • 通过断言和日志来查看测试结果

    断言的话需要去 www.mavenresipository.com(maven的中央仓库去)

    找到TestNG,选择用的人最多的一个版本然后复制他Maven栏的代码
    复制到pom.xml目录下,等一会儿依赖包就下载好啦。

    然后安装插件
    插件安装教程

​ 安装看这里用这个文章里的链接,旧的已经没有了 看这里

如果一直报错的话很有可能是版本的问题,反正我是一直在网上找解决方法然后都不行只好更新版本了。 更新版本的方法在这里 这里是更新方法

接下来就是及其漫长的等待,当然也有别的办法安装TestNG插件,无奈我也试过但是没效果就放弃啦!

接下来我们要把前面编写的脚本完完全全的变成测试用例,找到我们写appiumtest.java这个地方右键,会看到有TestNG的字样,点击convert to testNG,就一直下一步,直到完成,我们会发现源代码有所概念,我们写脚本的main函数上面多了一个Test标签。我们可以在@Test前添加一个初始化驱动

@BeforeTest
public Void setUp() throws MalformedURLException{这里吧配置的内容全部复制进去}

在@标签的后面呢我们也要添加一个和@beforetest相反的标签,他们一般都是一起使用的

//在测试用例完后我们需要销毁标签
@ AfterTest          //feardown表示一个销毁动作     标签AfterTest和beforeTest总是对出现
public void fearDown(){
//当测试用例运行完毕我们要销毁驱动(退出)
androidDriver.quit();
	
}

这样我们的测试用例就写完了,右键,然后run as TestNG

* 最后一步断言,测试用例的灵魂,就是上面运行完成以后有没有跳转到我们所设置的下一个页面

    String expected ="";//这是我们所期望的类名
    String actul = androidDriver.currentActivity();//这是真实的类名		
    Assert.assertEquals(actul, expected);//判断actul和expected是不是相同的




运行以后下方会有说明,第一条测试用例的编写就完成啦!!!!!

最后附上全本代码:
下面展示一些 内联代码片

package com.firstAppiumTest;

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 java.util.Currency;

import io.appium.java_client.android.AndroidDriver;

import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.ClickAction;
import org.openqa.selenium.remote.DesiredCapabilities;

public class AppiumTest {
    
	public static AndroidDriver<WebElement> androidDriver; //声明一个安卓驱动叫androidDriver
	
	
	
	//在测试开始之前初始化,将配置里的代码移植到主函数
	@BeforeTest
	public Void setUp() throws MalformedURLException{
		
		//1.创建配置对象
				DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
				
				//2.添加配置
				//deviceName :可以找到我们的测试设备
				desiredCapabilities.setCapability("deviceName", "127.0.0.1:62001");
				
				//platformName:测试平台Android or ios
				desiredCapabilities.setCapability("platformName", "Android");
				
				
				
				//appPackage:找到要测试的app
				desiredCapabilities.setCapability("appPackage", "com.gengyun.home");
				
				
				
				//automationName:uiautomator2来解决输入框输入不了数据
				//自动化引擎
				desiredCapabilities.setCapability("automationName", "uiautomator2");
				
				
				
				
				//appActivity:测试app的启动路径
				desiredCapabilities.setCapability("appActivity", "com.gengyun.home.activity.SplashActivity");
				
				//3.创建驱动
				//传入两个参数
				//第一个参数:Appium通讯地址
				//第二个参数:配置对象
				//AndroidDriver<WebElement>  由于声明了所以这个可以去掉
				androidDriver = new AndroidDriver <WebElement>(
						new URL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);
				return null;
		
	}
	
	
	@Test
	public static void testxinshidai() throws InterruptedException {
		
		//等待元素加载完毕
		//Thread.sleep(7000);
		//由于项目代码跑的较快,所以需要等待他稳定下来这是设置等待秒数为10s

		androidDriver.findElementById("com.gengyun.home:id/agree").click();//第一个开始页面点击同意
		
		
		androidDriver.findElementById("com.gengyun.home:id/tv_jump").click();//第二个一键登录界面点击跳过
		
		//1.找到新时代文本,并且点击
		//AndroidDriver<WebElement>  由于声明了所以这个可以去掉
	//	androidDriver.findElementById("com.gengyun.home:id/tv_tab_title").click();//这个括号内的内容是所捕获页面控件的resource-id
		                                                                  //click()是点击事件
		
		
		androidDriver.findElementById("com.gengyun.home:id/secondlayout").click();//由于上面的按钮id都一样我们换底部的button
		
		
		//2.到上面搜索栏,输入元宵
		androidDriver.findElementById("com.gengyun.home:id/et_search").click();
		
		androidDriver.findElementById("com.gengyun.home:id/et_search").click();
		
		
		androidDriver.findElementById("com.gengyun.home:id/et_search").sendKeys("元宵");//sendkeys()是输入事件
		
		//Thread.sleep(1000);
		
		androidDriver.findElementById("com.gengyun.home:id/common_search").click();//点击搜索按钮
		
		
		//3.找到搜索结果中的元宵,并且点击
		
		androidDriver.findElementById("com.gengyun.home:id/article_title").click();
		
		//可继续执行点击等操作
		
		//4.点击返回标
		androidDriver.findElementById("com.gengyun.home:id/back").click();
		
		//5.继续点击返回标
				androidDriver.findElementById("com.gengyun.home:id/back_search").click();
				
				//跳转到另外一个页面的时候也需要等待几秒,这里设置为两秒
				Thread.sleep(2000);
				
		//6.最后一步,断言,这对一个测试用例很重要,如果没有断言就像寿司没有芥末一样,没有灵魂
		String expected ="";//这是我们所期望的类名
		
		String actul = androidDriver.currentActivity();//这是真实的类名
		
		Assert.assertEquals(actul, expected);//判断actul和expected是不是相同的
		
		
	}
	
	//在测试用例完后我们需要销毁标签
	@ AfterTest          //feardown表示一个销毁动作     标签AfterTest和beforeTest总是成对出现
	public void fearDown(){
		
		//当测试用例运行完毕我们要销毁驱动(退出)
		androidDriver.quit();
		
	}
	
	
	
}

温馨提示:adb shell “dumpsys window | grep mCurrentFocus” 这条命令可以查询当前页面的类名!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值