发布时间:2023-08-11 11:00
在前文中,我们已经完成了如下知识点的铺垫:
一、QQ登录脚本测试用例
下面我们就来着手实现QQ轻聊版本应用的登录业务脚本的开发和运行。打开android模拟器上的qq应用
点击首页上的登录按钮
在登录页面输入用户名和密码
点击登录按钮
滑动条状验证码进行验证(如果有的话)
登录qq账号成功
二、测试环境准备JDK安装及path配置
启动夜神模拟器(或itools),安装qq软件,ADB连接模拟器正常打开Appium并启动服务,安装下图设置即可,host设置127.0.0.1,端口设置4723
三、脚本开发
启动Eclipse软件(支持java project开发),就可以根据测试用例创建java工程编写脚本了。
1、新建一个java project
2、在project下新建一个文件夹lib,把三个jar包拷贝到lib文件夹下,选中三个jar包后右键,点击Build Path->Add build path。
3、在src目录下新建一个包及class文件QQLogin,点击Finish即可。
4、QQLogin.java中实现如下代码使用java直接编写的脚本
package com.qf;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AppiumDriver;
public class QQLogin {
public static void main(String[] args) {
//打包DesiredCapabilities这个类DesiredCapabilities des = new DesiredCapabilities();
des.setCapability("platformName", "Android");
des.setCapability("platformVersion", "5.1.1");
des.setCapability("deviceName", "Android Emulator");
des.setCapability("noReset", true);
//获取包名及第一个页面的activitydes.setCapability("appPackage", "com.tencent.qqlite");
des.setCapability("appActivity", "com.tencent.mobileqq.activity.SplashActivity");
//创建AppiumDriver对象,连接上Appium服务器,并将相应的键值对传过去AppiumDriver driver = null;
try {
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//步骤1:点击首页的登录按钮driver.findElementById("com.tencent.qqlite:id/btn_login").click();
//步骤2:在登录页面用户名文本框中输入qq号码driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").clear();
driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("2572652583");
//步骤3:在登录页面密码文本框中输入异常的密码(123456789)Thread.sleep(2000);
driver.findElementById("com.tencent.qqlite:id/password").click();
driver.findElementById("com.tencent.qqlite:id/password").sendKeys("123456789");
//步骤4:点击登录按钮driver.findElementByAccessibilityId("登录QQ").click();
//为了能够正常地跳转到验证码页面,又添加了一个强制线程的等待//Thread.sleep(8000);//滑动验证码的图标到相应的位置//driver.swipe(169, 334, 347, 344, 3000);//符合qq的组成规范的号码不一定是qq号码,需要断言一下boolean flag = driver.findElementByAndroidUIAutomator("text('登录失败')").isDisplayed();
if(flag==true){
System.out.println("测试用例通过");
}
} catch (Exception e) {
System.out.println("测试用例不通过");
}finally{
driver.quit();
}
}
}使用java+junit单元测试框架进行重构
package com.qf;
import static org.junit.Assert.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AppiumDriver;
/*** 1、构建的被测试对象的类(键值对),是比较固定,所有的相关测试用例都是一样的,我可以把他放在5个方法中的哪一个比较合适?@BeforeClass***/
public class QQLoginUnit {
//需要将des声明为成员变量,如果一个变量想在静态方法中使用,则该变量必须也是静态的//一个静态的变量,能不能在一个普通成员方法中使用呢?是可以的public static DesiredCapabilities des;
@BeforeClass
public static void beforeClassss(){
//创建对象,des在方法中,就是局部变量,没办法跨方法使用des = new DesiredCapabilities();
//设置des的键值对des.setCapability("platformName", "Android");
des.setCapability("platformVersion", "5.1.1");
des.setCapability("deviceName", "Android Emulator");
des.setCapability("noReset", true);
//获取包名及第一个页面的activitydes.setCapability("appPackage", "com.tencent.qqlite");
des.setCapability("appActivity", "com.tencent.mobileqq.activity.SplashActivity");
}
@Before
public void before(){
}
//测试qq号码符合qq的组成规范的号码不一定是qq号码@Test
public void test_Login_UserName_true_1() {
AppiumDriver driver = null;
try {
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"),des);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//步骤1:点击首页的登录按钮driver.findElementById("com.tencent.qqlite:id/btn_login").click();
//步骤2:在登录页面用户名文本框中输入qq号码driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").clear();
driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("2572652583");
//步骤3:在登录页面密码文本框中输入异常的密码(123456789)Thread.sleep(2000);
driver.findElementById("com.tencent.qqlite:id/password").click();
driver.findElementById("com.tencent.qqlite:id/password").sendKeys("123456789");
//步骤4:点击登录按钮driver.findElementByAccessibilityId("登录QQ").click();
//为了能够正常地跳转到验证码页面,又添加了一个强制线程的等待//Thread.sleep(8000);//滑动验证码的图标到相应的位置//driver.swipe(169, 334, 347, 344, 3000);//符合qq的组成规范的号码不一定是qq号码,需要断言一下boolean flag = driver.findElementByAndroidUIAutomator("text('登录失败')").isDisplayed();)
assertEquals(flag,true);
} catch (Exception e) {
System.out.println("测试用例不通过");
}finally{
driver.quit();
}
}
}
5、运行脚本
main()方法中右键,选择run as->java application,运行脚本。
模拟器中按照设定的测试用例步骤执行。
附图移动端测试的知识脑图,可以完善我们测试的知识体系,如果知友对这部分内容感兴趣,可以持续关注小编的账号。
除此之外,小编还录制了不少这方面的技术视频,知友如果有需要,可以私聊本小编获取哦!
欢迎关注作者,如果觉得写的还不错,就给点个赞同、喜欢、收藏(后续持续更新)。
【全文手打 如需转载 请标注此出处】