《流浪之声》小项目自动化测试——基于Selenium4与Junit5

1.需求分析

主要对项目的一些功能以及页面的元素展示是否正确进行测试

2.测试设计

本次测试基于基于Selenium4与Junit5,对之前所作的一个小项目进行测试

在这里插入图片描述

3.测试执行

3.1.代码

登录页面测试:

package com.webAutoTest.Tests;

import com.webAutoTest.common.commonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;
import java.util.Set;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/11/12
 * \* Time: 13:52
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class loginTest extends commonDriver {
    public static ChromeDriver driver = getDriver();

    //编写测试用例
    /**
     * 获取url
     */
    @BeforeAll
    static void getUrl(){
        driver.get("http://114.132.153.133:8080/login.html");
    }

    /**
     * 校验元素是否正确展示
     */
    @Test
    @Order(1)
    void checkShow() throws IOException {
        String username = driver.findElement(By.cssSelector("#body > div > div:nth-child(2) > label")).getText();
        String password = driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label")).getText();
        getScreenshot(getClass().getName());
        //检验文本是否符合预期
        Assertions.assertEquals("用户名:",username);
        Assertions.assertEquals("密码:",password);
    }

    /**
     * 测试登录功能
     * @throws InterruptedException
     */
    @Test
    @Order(2)
    void login() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#user")).sendKeys("mrzhu");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
        Thread.sleep(5000);
    }


}

首页测试:

package com.webAutoTest.Tests;

import com.webAutoTest.common.commonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;
import java.util.Set;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/11/12
 * \* Time: 14:43
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class frontPageTest extends commonDriver {
    private static ChromeDriver driver = getDriver();
    /**
     * 跳转到首页url
     */
    @BeforeAll
    static void getUrl(){
        driver.get("http://114.132.153.133:8080/login.html");
    }

    @Test
    @Order(1)
    void login() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#user")).sendKeys("mrzhu");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
    }
    /**
     * 查询功能
     */
    @Test
    @Order(2)
    void inquireTest1() throws IOException {
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("珍重");
        driver.findElement(By.cssSelector("#submit1")).click();
        getScreenshot(getClass().getName());
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
    }
    @Test
    @Order(3)
    void inquireTest2() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("");
        driver.findElement(By.cssSelector("#submit1")).click();
        getScreenshot(getClass().getName());
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
        Thread.sleep(3000);
    }
    /**
     * 播放歌曲
     */
    @Test
    @Order(4)
    void playTest() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).click();
        getScreenshot(getClass().getName());
        Thread.sleep(3000);
    }

    @Test
    @Order(5)
    void deleteTest() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#info > tr:nth-child(3) > td:nth-child(5) > button:nth-child(1)")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
    }

    @Test
    @Order(6)
    void loveMusicTest() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#info > tr:nth-child(2) > td:nth-child(5) > button:nth-child(2)")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
    }

    //选择框选择,并删除选中的音乐
    @Test
    @Order(7)
    void selectBoxTest() throws IOException, InterruptedException {
        driver.findElement(By.xpath("//*[@id=\"41\"]")).click();
        driver.findElement(By.cssSelector("#delete")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
    }

    @Test
    @Order(8)
    void skipTest2() throws IOException {
        //获取当前页面的句柄
        String curwindow1 = driver.getWindowHandle();
        driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(2)")).click();
        //获取当前页面的句柄2
        String curwindow2 = driver.getWindowHandle();
        //获取所有页面的句柄
        Set<String> allwindows = driver.getWindowHandles();
        for(String window:allwindows){
            if(window != curwindow1){
                //跳转到该句柄(页面)
                driver.switchTo().window(window);
                getScreenshot(getClass().getName());
            }
        }
    }
}

收藏音乐测试:

package com.webAutoTest.Tests;

import com.webAutoTest.common.commonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/11/12
 * \* Time: 15:38
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class loveMusicTest extends commonDriver {
    private static ChromeDriver driver = getDriver();
    /**
     * 跳转到首页url
     */
    @BeforeAll
    static void getUrl(){
        driver.get("http://114.132.153.133:8080/login.html");
    }

    @Test
    @Order(1)
    void login() throws InterruptedException {
        driver.findElement(By.cssSelector("#user")).sendKeys("mrzhu");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();

    }

    @Test
    @Order(2)
    void skipLoveMusic() throws IOException {
        driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)")).click();
        getScreenshot(getClass().getName());
    }



    /**
     * 查询功能
     */
    @Test
    @Order(3)
    void inquireTest1() throws IOException {
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("珍重");
        driver.findElement(By.cssSelector("#submit1")).click();
        getScreenshot(getClass().getName());
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
    }
    @Test
    @Order(4)
    void inquireTest2() throws IOException {
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys("");
        driver.findElement(By.cssSelector("#submit1")).click();
        getScreenshot(getClass().getName());
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
    }

    /**
     * 播放歌曲
     */
    @Test
    @Order(5)
    void playTest() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#info > tr > td:nth-child(3) > button")).click();
        getScreenshot(getClass().getName());
        Thread.sleep(3000);
    }

    @Test
    @Order(6)
    void deleteTest() throws InterruptedException, IOException {
        driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(4) > button")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        getScreenshot(getClass().getName());
    }

    /**
     * 点击按钮跳转
     */
    @Test
    @Order(7)
    void skipTest1() throws IOException {
        driver.findElement(By.cssSelector("body > div.container > div:nth-child(3) > a")).click();
        getScreenshot(getClass().getName());
    }

}

上传音乐测试:

package com.webAutoTest.Tests;

import com.webAutoTest.common.commonDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

import java.io.IOException;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/11/12
 * \* Time: 15:38
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class uploadMusicTest extends commonDriver {
    private static ChromeDriver driver = getDriver();

    /**
     * 跳转到首页url
     */
    @BeforeAll
    static void getUrl(){
        driver.get("http://114.132.153.133:8080/login.html");
    }

    @Test
    @Order(1)
    void login() throws InterruptedException {
        driver.findElement(By.cssSelector("#user")).sendKeys("mrzhu");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(2000);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        Thread.sleep(2000);
        driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(2)")).click();
    }
    //文件上传
    @Test
    @Order(2)
    public void fileupload() throws InterruptedException, IOException {
        WebElement ele = driver.findElement(By.cssSelector("body > form > input[type=file]:nth-child(1)"));
        ele.sendKeys("C:\\Users\\Administrator.DESKTOP-6LVQU9V\\Music\\图片.mp3");
        driver.findElement(By.cssSelector("body > form > input[type=submit]:nth-child(3)")).click();
        getScreenshot(getClass().getName());
    }


}


3.2.git链接

详细代码链接

4.测试评估

与预期结果一致,全部通过测试

在这里插入图片描述


5.反思

  1. 使用注解:避免生成过多对象,造成了资源和时间的浪费。
  2. 通过static修饰静态变量,全局只创建一次驱动对象,避免重复创建驱动对象造成时间的浪费。
  3. 使用参数化:保持用例的简洁,提高了代码的可读性。
  4. 使用测试套件:一次执行所有我们想要运行的自动化用例。
  5. 使用等待(隐式等待+强制等待):提高自动化指定的稳定性。-----降低自动化出现误报的概率
  6. 使用屏幕截图:方便问题的追溯和问题的解决。

虽然看着简单,由于初学,这个东西也花费几乎一天时间,主要是调试错误,寻找bug浪费了时间。坐到我脊椎都疼了…该休息了…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十叶知秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值