跟着网课总算看玩了第一个测试用例,附上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” 这条命令可以查询当前页面的类名!