appuim java 脚本_APP自动化测试神器之Appium-QQ登录脚本实战(java版)

发布时间: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,运行脚本。

模拟器中按照设定的测试用例步骤执行。

附图移动端测试的知识脑图,可以完善我们测试的知识体系,如果知友对这部分内容感兴趣,可以持续关注小编的账号。

除此之外,小编还录制了不少这方面的技术视频,知友如果有需要,可以私聊本小编获取哦!

欢迎关注作者,如果觉得写的还不错,就给点个赞同、喜欢、收藏(后续持续更新)。

【全文手打 如需转载 请标注此出处】

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号