前记
没错,它又来了,期末报告它又来了,它又带着要求走来了......
反正简而言之就是利用这学期用过的测试工具、学过的测试方法对任意一个登录页面进行测试。所以我一开始就决定利用Selenium、JUnit这两个工具去做。也是找了n多资料和代码,最开始定位是京东的登录页面,可恶的滑动验证码,遂放弃,找了别的页面,,放弃,,
最后把主意打到了自己之前学习的项目里的登录页面,谁说它不是呢?
代码
废话不多说,上代码,当然在运行以下代码之前先要安装好跟浏览器版本匹配的驱动。这里不多赘述,有很多帖子详细说了Selenium工具的使用。
package org.example;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class LoginTest {
private WebDriver driver;
@BeforeEach
public void setUp() {
System.setProperty("webdriver.chrome.driver", "E:\\Download\\chromedriver-win64\\chromedriver-win64\\chromedriver.exe");
// 这里的路径要替换成自己下载chromedriver的路径
driver = new ChromeDriver();
// 隐式等待
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
// 这个路径是你测试网页的路径
driver.get("http://localhost:5173/login");
}
@Test
public void testLoginWithCorrectItems() throws InterruptedException {
// 利用工具获取网页元素,自己在代码里加个id属性也不是不行(
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("btn"));
usernameInput.sendKeys("xingle1");
passwordInput.sendKeys("123456");
loginButton.click();
Thread.sleep(5000);
// 断言,判断预期页面与当前页面是否相符合,看自己需求
assertEquals("http://localhost:5173/article/manage", driver.getCurrentUrl());
}
@Test
public void testLoginWithWrongPassword() throws InterruptedException {
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("btn"));
usernameInput.sendKeys("xingle1");
passwordInput.sendKeys("654321");
Thread.sleep(3000);
loginButton.click();
WebElement errorMsg = driver.findElement(By.className("el-message__content"));
assertEquals("登录失败!", errorMsg.getText());
}
@Test
public void testLoginWithEmptyUsername() throws InterruptedException {
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("btn"));
usernameInput.sendKeys("");
passwordInput.sendKeys("123456");
loginButton.click();
Thread.sleep(3000);
WebElement errorMsg = driver.findElement(By.className("el-form-item__error"));
assertEquals("请输入用户名", errorMsg.getText());
}
@Test
public void testLoginWithEmptyPassword() throws InterruptedException {
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("btn"));
usernameInput.sendKeys("xingle1");
passwordInput.sendKeys("");
loginButton.click();
Thread.sleep(3000);
WebElement errorMsg = driver.findElement(By.className("el-form-item__error"));
assertEquals("请输入密码", errorMsg.getText());
}
@Test
public void testLoginWithBothEmpty() throws InterruptedException {
WebElement usernameInput = driver.findElement(By.id("username"));
WebElement passwordInput = driver.findElement(By.id("password"));
WebElement loginButton = driver.findElement(By.id("btn"));
usernameInput.sendKeys("");
passwordInput.sendKeys("");
loginButton.click();
Thread.sleep(3000);
List<WebElement> errorMsgs = driver.findElements(By.className("el-form-item__error"));
assertEquals("请输入用户名", errorMsgs.get(0).getText());
assertEquals("请输入密码", errorMsgs.get(1).getText());
}
@AfterEach
public void tearDown() {
if (driver != null) {
driver.quit();
}
}
}
测试用例
这个地方可以看到我写了六个单元测试,主要是根据具体页面情况而定。
用例编号 | 用例描述 | 前置条件 | 测试数据 | 预期结果 |
Test001 | 账号和密码正确 | 无 | 账号:xingle1 | 成功登录并重定向到主页 |
Test002 | 账号正确密码错误 | 无 | 账号:xingle1 | 显示错误提示 |
Test003 | 账号错误密码正确 | 无 | 账号:zxx | 显示错误提示 |
Test004 | 账号和密码均为空 | 无 | 账号: | 登录按钮禁用,无法进行下一步,显示错误信息 |
Test005 | 账号为空密码正确 | 无 | 账号: | 登录按钮禁用,无法进行下一步,显示错误信息 |
Test006 | 账号正确密码为空 | 无 | 账号:xingle1 | 登录按钮禁用,无法进行下一步,显示错误信息 |
结果
正确用户名和密码👇:
后记
其实说到底就是获取元素+自动操作+断言。
获取元素的话,就算不是原生HTML,Vue的框架也是可以的,亲测(用的黑马的项目、、。
现在看起来好小儿科,但是当时还是搞了一下午((、、、、