一.项目背景
- 本平台基于 SSM 框架打造。该系统为用户提供了一个便捷的听音乐平台。平台具备美观且响应式的页面设计,在各种功能上都能提供方便的体验:用户可以轻松登录或注册,自由添加或删除歌曲。通过 SSM 框架的整合,系统运行稳定,性能优越,数据处理高效,为用户打造了一个功能较为齐全、操作简便的在线音乐播放器平台。
- 但是该项目在设计时有以下几个问题:
- 没有未登录状态;
- 没有用户注销功能;
- 上传音乐文件时,非mp3格式的文件也能上传,但是上传之后删不掉,必须去数据库才能删除这种异常文件。
二.项目功能
该乐响云端网页应用主要实现了以下几个功能:注册、登录、找回密码,播放歌曲,查询歌曲,上传歌曲,喜欢歌曲,删除歌曲,评论歌曲等功能。
注册功能:通过注册页面,进行不同身份的注册;用户使用邮箱、密码、进行注册。账号已经存在的,注册失败;账号不存在的,用户直接注册成功。
登录功能:账号以及密码已经在注册时写入了数据库,即:用户名以及密码是已经存在的,登录成功后就会跳转到对应的身份的列表页面。用户登录成功后,如果还未上传歌曲,在页面中间会存在查询,喜欢列表,上传歌曲,删除选中这四个按钮,如果已经上传歌曲,那么就还有播放歌曲、播放评论,删除、喜欢、评论这五个按钮。
找回密码功能:用户通过邮箱接收验证码的方式来找回密码。
播放歌曲功能:用户在音乐列表界面点击“播放音乐”按钮,此时音乐自动播放,有声音。
播放评论功能:用户在音乐列表界面点击“播放评论”按钮,此时评论会以弹幕形式出现在界面。
查询歌曲功能:用户在音乐列表页面和喜欢音乐页面查询框输入歌曲名,如果歌曲名清晰,会显示此歌曲;如果歌曲名模糊,则会显示所有相关的歌曲。
上传歌曲功能:用户点击音乐列表界面点击“上传歌曲”按钮,可进行上传歌曲操作。但是对上传文件的格式却没有限制。
喜欢歌曲功能:用户点击音乐列表界面点击“喜欢”按钮,如果歌曲已喜欢,则会有弹窗提示:歌曲已经收藏过了,无需再收藏~;如果歌曲未喜欢,则会有弹窗提示:收藏成功~。
取消喜欢功能:用户点击音乐列表的“喜欢列表”,跳转到喜欢音乐的页面后,如果有喜欢的歌曲,则会出现“取消喜欢”,点击即可取消喜欢。
删除歌曲功能:用户点击音乐列表界面点击“删除”按钮,若删除成功,则会有弹窗提示:删除成功;但是对于异常文件(非mp3格式)则会弹窗提示:该音乐不存在,删除失败~。
三.功能测试
1)测试用例
功能测试结果:测试用例98%通过
2)自动化测试
自动化测试覆盖模块:登录页面、注册页面、找回密码页面、音乐列表页面、喜欢音乐页面。
自动化代码示例:
1.commen包
import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.edge.EdgeOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Store;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.Properties;
public class Utils {
public static WebDriver driver;
public static WebDriver createDriver(){
if(driver==null){
//驱动程序管理的⾃动化
WebDriverManager.edgedriver().setup();
EdgeOptions options=new EdgeOptions();
//允许访问所有连接
options.addArguments("--remote-allow-origins=*");
driver=new EdgeDriver(options);
//等待
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
}
return driver;
}
public Utils(String url){
driver=createDriver();
driver.get(url);
}
public void getScreenShot(String str) throws IOException {
SimpleDateFormat sim1=new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sim2=new SimpleDateFormat("HHmmSS");
String dirTime=sim1.format(System.currentTimeMillis());
String fileTime=sim2.format(System.currentTimeMillis());
String filename="./src/test/image/"+dirTime+"/"+str+"-"+fileTime+".png";
File srcFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//srcFile放到指定位置
FileUtils.copyFile(srcFile,new File(filename));
}
public void AlertProcess(){
//使用显式等待来确保弹窗确实存在
WebDriverWait wait = new WebDriverWait(driver, 30);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.accept();
}
public String extractVerificationCode() {
String host = "imap.qq.com"; // 邮件服务器地址
final String username = "3584375358@qq.com"; // 发件邮箱地址
final String password = "ukmhbumlpzyhdbbi"; // 邮箱密码
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", "993");
Session emailSession = Session.getDefaultInstance(properties);
try {
Store store = emailSession.getStore("imaps");
store.connect(host, username, password);
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
Message[] messages = emailFolder.getMessages();
if (messages.length > 0) {
Message latestMessage = messages[messages.length - 1];
String content = latestMessage.getContent().toString();
// 提取验证码(假设验证码是一个6位数字)
// 使用正则表达式或其他方法从邮件内容中提取验证码
// 例如,如果验证码是一个6位数字,可以使用以下正则表达式
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\b\\d{6}\\b");
java.util.regex.Matcher matcher = pattern.matcher(content);
if (matcher.find()) {
return matcher.group();
}
}
emailFolder.close(false);
store.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2.tests包
(1) LoginPage(登录页面)
package tests;
import commen.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
public class LoginPage extends Utils {
public static String url="http://127.0.0.1:8089/login.html";
public LoginPage(){
super(url);
}
/*
页面可以正常打开
*/
public void LoginPageRight() throws InterruptedException, IOException {
//能找到登录按钮
driver.findElement(By.cssSelector("#submit"));
//正常打开登录页面截图
//getScreenShot(getClass().getName());
}
private void Clear(){
driver.findElement(By.cssSelector("#user")).clear();
driver.findElement(By.cssSelector("#password")).clear();
}
/*
登陆成功
*/
public void LoginSuccess() throws InterruptedException, IOException {
//正确的账号和密码
//1.先清空账号和密码栏
Clear();
//2.输入正确的账号和密码
driver.findElement(By.cssSelector("#user")).sendKeys("1368129946");
driver.findElement(By.cssSelector("#password")).sendKeys("12345679");
driver.findElement(By.cssSelector("#submit")).click();
//3.处理弹窗
AlertProcess();
Thread.sleep(1000);
//4.登陆成功截图---跳转音乐列表页面
getScreenShot(getClass().getName());
// driver.quit();
}
/*
登录失败
*/
public void LoginFail() throws InterruptedException {
//1.账号或密码为空
//账号为空
driver.findElement(By.cssSelector("#user")).sendKeys("");
driver.findElement(By.cssSelector("#password")).sendKeys("123456..");
driver.findElement(By.cssSelector("#submit")).click();
//处理弹窗
AlertProcess();
Thread.sleep(2000);
//清空账号和密码栏
Clear();
//密码为空
driver.findElement(By.cssSelector("#user")).sendKeys("1406805084");
driver.findElement(By.cssSelector("#password")).sendKeys("");
driver.findElement(By.cssSelector("#submit")).click();
//处理弹窗
AlertProcess();
Thread.sleep(2000);
Clear();
//2.账号和密码都不为空
//账号错误
driver.findElement(By.cssSelector("#user")).sendKeys("1406805088");
driver.findElement(By.cssSelector("#password")).sendKeys("test123456..");
driver.findElement(By.cssSelector("#submit")).click();
String text=driver.findElement(By.cssSelector("#message")).getText();
assert text.equals("登录失败,用户不存在!");
Thread.sleep(2000);
Clear();
//账号和密码均错误
driver.findElement(By.cssSelector("#user")).sendKeys("1406805088");
driver.findElement(By.cssSelector("#password")).sendKeys("123456..");
driver.findElement(By.cssSelector("#submit")).click();
String text2=driver.findElement(By.cssSelector("#message")).getText();
assert text2.equals("登录失败,用户不存在!");
Thread.sleep(2000);
Clear();
//密码错误
driver.findElement(By.cssSelector("#user")).sendKeys("1406805084");
driver.findElement(By.cssSelector("#password")).sendKeys("test123456");
driver.findElement(By.cssSelector("#submit")).click();
String text3=driver.findElement(By.cssSelector("#message")).getText();
assert text2.equals("登录失败,账号或密码错误!");
}
}
(2) ListPage(音乐列表页面)
package tests;
import commen.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
public class ListPage extends Utils {
public static String url="http://127.0.0.1:8089/list.html";
public ListPage(){
super(url);
}
/*
登录状态下查询功能测试
*/
public void Query() throws InterruptedException, IOException {
//1.页面可以正常打开
//能找到查询按钮
driver.findElement(By.cssSelector("#submit1"));
//歌曲列表表头
driver.findElement(By.cssSelector("#body > div.container > table > tbody:nth-child(1) > tr"));
//2.查询功能
//正常查询---曲库中有被查询歌曲
//(1)歌曲名清晰
driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("那些你很冒险的梦");
driver.findElement(By.cssSelector("#submit1")).click();
String text=driver.findElement(By.cssSelector("#info > tr > td:nth-child(2)")).getText();
assert text.equals("那些你很冒险的梦");
Thread.sleep(2000);
//(2)歌曲名模糊
driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("刀");
driver.findElement(By.cssSelector("#submit1")).click();
//截图显示所有查询到的相关歌曲
getScreenShot(getClass().getName());
Thread.sleep(2000);
//3.异常查询--什么都不输入/输入空格--此用例不通过
//什么都不输入
//输入空格--弹窗内容应为:关键字为空的搜索结果
driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys(" ");
driver.findElement(By.cssSelector("#submit1")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String atext=alert.getText();
assert atext.equals("关键字为空的搜索结果");
//实际上是:在音乐库当中没有找到您要找的歌曲~
alert.accept();
}
/*
喜欢音乐列表
*/
public void LoveList(){
//点击喜欢列表
driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)")).click();
//跳转到喜欢列表页面----能找到回到首页按钮
driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a"));
driver.quit();
}
/*
上传歌曲
*/
public void UploadSong() throws IOException, InterruptedException {
driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > button")).click();
getScreenShot(getClass().getName());
Thread.sleep(3000);
driver.quit();
}
/*
删除选中
*/
public void Delete(){
driver.findElement(By.id("3")).click();
driver.findElement(By.cssSelector("#delete")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String atext=alert.getText();
assert atext.equals("音乐删除成功");
// driver.quit();
}
/*
歌曲列功能测试
*/
public void Song() throws InterruptedException, IOException {
//播放歌曲
driver.findElement(By.cssSelector("#info > tr > td:nth-child(4) > button:nth-child(1)")).click();
getScreenShot(getClass().getName());
Thread.sleep(3000);
driver.quit();
//播放评论
}
/*
操作列功能测试
*/
public void Operation() throws InterruptedException {
//删除
//1.是当前用户上传的歌曲
driver.findElement(By.cssSelector("#info > tr:nth-child(3) > td:nth-child(5) > button:nth-child(1)")).click();
WebDriverWait wait = new WebDriverWait(driver, 20);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String text=alert.getText();
assert text.equals("删除成功");
alert.accept();
//2.不是当前用户上传的歌曲
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(1)")).click();
Alert alert2 = wait.until(ExpectedConditions.alertIsPresent());
String text2=alert.getText();
assert text2.equals("该音乐只能由上传者进行删除,您无权删除");
alert.accept();
//喜欢
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(2)")).click();
Alert alert3 = wait.until(ExpectedConditions.alertIsPresent());
String text3=alert.getText();
assert text3.equals("收藏成功~");
alert.accept();
//评论
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(5) > button:nth-child(3)")).click();
driver.findElement(By.cssSelector("#commente")).sendKeys("真好听~");
driver.findElement(By.cssSelector("#sendComment")).click();
Alert alert4 = wait.until(ExpectedConditions.alertIsPresent());
String text4=alert.getText();
assert text4.equals("评论成功~");
alert.accept();
driver.quit();
}
}
(3)LoveMusicPage(喜欢音乐页面)
package tests;
import commen.Utils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
/*
登录状态下
*/
public class LoveMusicPage extends Utils {
public static String url="http://127.0.0.1:8089/loveMusic.html";
public LoveMusicPage(){
super(url);
}
public void LoginByLoveMusic() throws IOException {
//1.页面可以正常打开---能找到回到首页按钮
driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a"));
//2.可以对喜欢音乐列表进行操作
//播放歌曲操作---截图看音乐播放框Playing是否一致
getScreenShot(getClass().getName());
driver.findElement(By.cssSelector("#info > tr > td:nth-child(3) > button")).click();
getScreenShot(getClass().getName());
//取消喜欢操作---弹窗提示:取消成功~
driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).click();
WebDriverWait wait = new WebDriverWait(driver, 10);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String text=alert.getText();
assert text.equals("取消成功~");
alert.accept();
}
}
(4)RegisterPage(注册页面)
package tests;
import commen.Utils;
import org.checkerframework.checker.units.qual.A;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class RegisterPage extends Utils {
public static String registerurl="http://127.0.0.1:8089/register.html";
public static String loginurl="http://127.0.0.1:8089/login.html";
public RegisterPage(){
super(registerurl);
}
public void RegisterRightPage(){
//1.从登录页面打开--点击注册,跳转后能找到注册按钮
driver.findElement(By.cssSelector("#body > div.container > a:nth-child(4)")).click();
driver.findElement(By.cssSelector("#submit"));
//2.从连接打开
driver.findElement(By.cssSelector("#submit"));
//3.可以回到登录页面--点击 已有账号?去登录 跳转回登录页面
driver.findElement(By.cssSelector("#body > div.container > a")).click();
driver.findElement(By.cssSelector("#body > div.container > h3"));
}
public void RegisterSuccess() throws InterruptedException {
//输入邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//密码
driver.findElement(By.cssSelector("#password1")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#password2")).sendKeys("12345678");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
String emailcode=extractVerificationCode();
//得到并输入验证码
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode);
driver.findElement(By.cssSelector("#submit")).click();
AlertProcess();
// driver.quit();
}
public void RegisterFailByPassword() throws InterruptedException {
//密码
//1.密码长度不一致
//输入邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//密码
driver.findElement(By.cssSelector("#password1")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#password2")).sendKeys("123456789");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
// //得到并输入验证码
String emailcode=extractVerificationCode();
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode);
driver.findElement(By.cssSelector("#submit")).click();
WebDriverWait wait = new WebDriverWait(driver, 20);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String text=alert.getText();
assert text.equals("两次密码长度不一致,请重新输入~");
alert.accept();
//2.长度一致,内容不一致
driver.findElement(By.cssSelector("#password2")).clear();
driver.findElement(By.cssSelector("#password2")).sendKeys("12345679");
driver.findElement(By.cssSelector("#submit")).click();
String text2=driver.findElement(By.cssSelector("#message")).getText();
assert text2.equals("登录密码和确认密码不一致,请核对后重新输入~");
// driver.quit();
}
public void RegisterFailByEmail() throws InterruptedException {
//邮箱
//1.邮箱错误
//输入邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375357@qq.com");
//密码
driver.findElement(By.cssSelector("#password1")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#password2")).sendKeys("12345678");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
driver.findElement(By.cssSelector("#submit")).click();
Alert alert2 = driver.switchTo().alert();
String text3=alert2.getText();
// assert text3.equals("验证码发送失败,请核对邮箱正确性重新发送~");//应该是这句,但是会有个新的弹窗覆盖此弹窗
assert text3.equals("请输入验证码");
alert2.accept();
//2.已注册
driver.findElement(By.cssSelector("#email")).clear();
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
String emailcode3=extractVerificationCode();
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode3);
driver.findElement(By.cssSelector("#submit")).click();
String text4=driver.findElement(By.cssSelector("#message")).getText();
// assert text4.equals("该邮箱不可以同时绑定多个账号,请换个邮箱再来注册~");//手动测试有,自动化测试并未出现这句
assert text4.equals("您未使用当前邮箱发送验证码~");
driver.quit();
}
public void RegisterFailByCode() throws InterruptedException {
//输入邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//密码
driver.findElement(By.cssSelector("#password1")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#password2")).sendKeys("12345678");
//验证码
//1.未发送
driver.findElement(By.cssSelector("#submit")).click();
WebDriverWait wait = new WebDriverWait(driver, 20);
Alert alert2= wait.until(ExpectedConditions.alertIsPresent());
String text5=alert2.getText();
assert text5.equals("请输入验证码");
alert2.accept();
//2.120秒内重复发送
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
// Alert alert3= wait.until(ExpectedConditions.alertIsPresent());
// String text6=alert3.getText();
// assert alert3.equals("您已经发送过验证码了,不可重复发送~");
// alert3.accept();
//3输入错误
driver.findElement(By.cssSelector("#emailCode")).sendKeys("999999");
driver.findElement(By.cssSelector("#submit")).click();
String text7=driver.findElement(By.cssSelector("#message")).getText();
assert text7.equals("验证码输入有误,请重新输入~");
//4.过期
driver.findElement(By.cssSelector("#emailCode")).clear();
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
String emailcode4=extractVerificationCode();
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode4);
Thread.sleep(120000);//等待120秒
driver.findElement(By.cssSelector("#submit")).click();
String text8=driver.findElement(By.cssSelector("#message")).getText();
assert text8.equals("验证码已过期,请重新发送~");
driver.quit();
}
}
(5)RetPasswordPage(找回密码页面)
package tests;
import commen.Utils;
import org.checkerframework.checker.units.qual.A;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.io.IOException;
public class RetPasswordPage extends Utils {
public static String retpasswordurl="http://127.0.0.1:8089/retpassword.html";
public static String loginurl="http://127.0.0.1:8089/retpassword.html";
public RetPasswordPage(){
super(retpasswordurl);
// super(loginurl);
}
public void RetPasswordRightPage() throws IOException {
//1.从登录页面打开--点击 忘记密码?点击找回
driver.findElement(By.cssSelector("#body > div.container > a:nth-child(6)")).click();
getScreenShot(getClass().getName());
//2.从连接打开
getScreenShot(getClass().getName());
//3.可以跳转回到注册页面和登录页面
driver.findElement(By.cssSelector("#body > div.container > a:nth-child(6)")).click();
getScreenShot(getClass().getName());
driver.navigate().back();
driver.findElement(By.cssSelector("#body > div.container > a:nth-child(8)")).click();
getScreenShot(getClass().getName());
}
public void RetPasswordSuccess(){
//邮箱正确,密码一致,验证码正确
//输入邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//重置密码
driver.findElement(By.cssSelector("#passwordA")).sendKeys("12345679");
//确认密码
driver.findElement(By.cssSelector("#passwordB")).sendKeys("12345679");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
String emailcode=extractVerificationCode();
//得到并输入验证码
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode);
driver.findElement(By.cssSelector("#submit")).click();
// AlertProcess();
WebDriverWait wait = new WebDriverWait(driver, 20);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
String text=alert.getText();
assert text.equals("密码修改成功~");
alert.accept();
// driver.quit();
}
public void RetPasswordFailByEmail() throws IOException, InterruptedException {
//邮箱错误
driver.findElement(By.cssSelector("#email")).sendKeys("3584375357@qq.com");
//重置密码
driver.findElement(By.cssSelector("#passwordA")).sendKeys("12345679");
//确认密码
driver.findElement(By.cssSelector("#passwordB")).sendKeys("12345679");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
Thread.sleep(1000);
String text=driver.findElement(By.cssSelector("#message")).getText();
assert text.equals("验证码发送失败,请核对邮箱正确性重新发送~");
// driver.quit();
}
public void RetPasswordFailByPassword() throws InterruptedException {
//邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//重置密码
driver.findElement(By.cssSelector("#passwordA")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#passwordB")).sendKeys("12345679");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
String emailcode=extractVerificationCode();
//得到并输入验证码
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode);
Thread.sleep(2000);
driver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(2000);
// 登录密码和确认密码不一致,请核对后重新输入~
String text=driver.findElement(By.cssSelector("#message")).getText();
assert text.equals("登录密码和确认密码不一致,请核对后重新输入~");
}
public void RetPasswordFailByCode() throws InterruptedException {
//1.验证码未发送
//邮箱
driver.findElement(By.cssSelector("#email")).sendKeys("3584375358@qq.com");
//重置密码
driver.findElement(By.cssSelector("#passwordA")).sendKeys("12345678");
//确认密码
driver.findElement(By.cssSelector("#passwordB")).sendKeys("12345678");
//发送验证码
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
driver.findElement(By.cssSelector("#submit")).click();
Alert alert= driver.switchTo().alert();
String text=alert.getText();
assert text.equals("请输入验证码~");
alert.accept();
// //2.120秒内重复发送
// driver.findElement(By.cssSelector("#sendCode")).click();
// AlertProcess();
// driver.findElement(By.cssSelector("#sendCode")).click();
// AlertProcess();
//
// Thread.sleep(3000);
//
// String text2=driver.findElement(By.cssSelector("#message")).getText();
// assert text2.equals("您已经发送过验证码了,不可重复发送~");
//3输入错误
driver.findElement(By.cssSelector("#emailCode")).sendKeys("999999");
driver.findElement(By.cssSelector("#submit")).click();
String text7=driver.findElement(By.cssSelector("#message")).getText();
assert text7.equals("验证码输入有误,请重新输入~");
//4.过期
driver.findElement(By.cssSelector("#emailCode")).clear();
driver.findElement(By.cssSelector("#sendCode")).click();
AlertProcess();
String emailcode4=extractVerificationCode();
driver.findElement(By.cssSelector("#emailCode")).sendKeys(emailcode4);
Thread.sleep(120000);//等待120秒
driver.findElement(By.cssSelector("#submit")).click();
String text8=driver.findElement(By.cssSelector("#message")).getText();
assert text8.equals("验证码已过期,请重新发送~");
driver.quit();
}
}
自动化测试用例数量:50
自动化测试结果:pass:58/60,fail:2/60
自动化测试问题是否已经修复:是
四.遗留风险
系统主功能基本没有问题,可能仍有细节未照顾到。
五.测试结果评估
主功能测试通过,项目可以上线。