对音乐播放器进行自动化测试:实现音乐播放器_strbug的博客-CSDN博客

1. 使用脑图编写 web 自动化测试用例 

2. 准备工作

1. 创建一个 Maven 项目

2. 在 Tests包下的 java 下建包管理自己后续要写的代码。在common包下创建驱动和测试套件的类。

3. 导入自动化测试需要的相关依赖.

 

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.8.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite</artifactId>
    <version>1.8.2</version>
    <scope>test</scope>
</dependency>

3. 根据脑图设计博客系统自动化测试用例

3.1  测试登录页面

创建loginPage类,这个类主要有6个测试用例:

1.验证登录页面是否正常显示。

2.用户名和密码为空。是否会弹出:用户名或者密码不能为空!

3.用户名不为空,密码为空。是否会弹出:用户名或者密码不能为空!

4.用户名为空,密码不为空。是否会弹出:用户名或者密码不能为空!

5.用户名/密码错误,或者都错误。是否会弹出:登录失败,密码或者用户名错误!

6.用户名和密码正确。是否正常登录

1.页面是否正常显示。

相关代码 : 

//登录页面
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class loginPage extends commonDriver {
    private static EdgeDriver driver = getDriver();


    // 在每个测试用例之前运行
    @BeforeAll
    static void setUp() throws Exception {
        // 打开网页
        driver.get("http://127.0.0.1:8080/login.html");
        driver.manage().window().maximize();
    }

    /**
     * 验证登录页面是否正常显示
     * @throws Exception
     */
    @Test
    @Order(1)
    void testLoginPage() throws Exception {
        String title = driver.findElement(By.cssSelector("#body > div > h3")).getText();
        // 验证登录页面是否正确显示
        assertEquals("管理员登录", title);
        assertTrue(driver.findElement(By.id("user")).isDisplayed());
        assertTrue(driver.findElement(By.id("password")).isDisplayed());
        assertTrue(driver.findElement(By.id("submit")).isDisplayed());
    }
}

 2.用户名和密码为空

 在loginPage类添加loginNullFail()

    /**
     * 用户名和密码为空
     * @throws InterruptedException
     */
    @Test
    @Order(2)
    void loginNullFail() throws InterruptedException {

        // 密码或用户名为空
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(500);

        // 验证登录失败后是否弹出提示框
        Alert alert = driver.switchTo().alert();
        assertEquals("用户名或者密码不能为空!", alert.getText());
        alert.accept();
    }

 

3.密码为空

在loginPage类添加loginFail2()

    /**
     * 密码为空
     * @param user
     * @throws InterruptedException
     */
    @ParameterizedTest
    @CsvSource({"bit"})
    @Order(3)
    void loginFail2(String user) throws InterruptedException {
        // 登录之前先清空用户名和密码
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入错误的密码
        driver.findElement(By.cssSelector("#user")).sendKeys(user);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(500);

        // 验证登录失败后是否弹出提示框
        Alert alert = driver.switchTo().alert();
        assertEquals("用户名或者密码不能为空!", alert.getText());
        alert.accept();
    }

4.用户名为空

在loginPage类添加loginFail1()

    /**
     * 用户名为空
     * @param password
     * @throws InterruptedException
     */
    @ParameterizedTest
    @CsvSource({"123456"})
    @Order(4)
    void loginFail1(String password) throws InterruptedException {
        // 登录之前先清空用户名和密码
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入错误的用户名
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(500);

        // 验证登录失败后是否弹出提示框
        Alert alert = driver.switchTo().alert();
        assertEquals("用户名或者密码不能为空!", alert.getText());
        alert.accept();
    }

5.用户名或密码错误

在loginPage类添加testLoginFail()

    /**
     * 用户名或密码错误
     * @param user
     * @param password
     * @throws Exception
     */
    @ParameterizedTest
    @CsvSource({"admin,123"})
    @Order(5)
    void testLoginFail(String user, String password) throws Exception {
        // 登录之前先清空用户名和密码
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入错误的用户名和密码
        driver.findElement(By.cssSelector("#user")).sendKeys(user);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(500);

        // 验证登录失败后是否弹出提示框
        Alert alert = driver.switchTo().alert();
        assertEquals("登录失败,密码或者用户名错误!", alert.getText());
        alert.accept();
    }

6.用户名和密码正确

在loginPage类添加testLoginSuccess()

    /**
     * 用户名和密码正确
     * @param user
     * @param password
     * @throws Exception
     */
    @ParameterizedTest
    @CsvSource({"bit,123456"})
    @Order(6)
    void testLoginSuccess(String user, String password) throws Exception {
        // 登录之前先清空用户名和密码
        driver.findElement(By.cssSelector("#user")).clear();
        driver.findElement(By.cssSelector("#password")).clear();
        // 输入正确的用户名和密码
        driver.findElement(By.cssSelector("#user")).sendKeys(user);
        driver.findElement(By.cssSelector("#password")).sendKeys(password);
        driver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(500);
        Alert alert = driver.switchTo().alert();
        alert.accept();
        // 验证登录成功后是否跳转到正确页面
        String title = driver.findElement(By.cssSelector("#body > div.container > h3")).getText();
        assertEquals("在线音乐服务器实现", title);
    }

3.2  音乐列表页

创建MusicListTest类,里面有8个测试用例:

1.检测音乐列表页面是否正常显示

2.验证模糊查询是否成功。输入G是否显示带有G的全部音乐

3.输入框为空是否能查询全部音乐

4.是否可以播放音乐

5.点击收藏音乐。是否弹出:收藏成功!

6.点击收藏音乐。是否弹出:收藏失败!

7.验证删除按钮。是否弹出:删除成功,重新加载到当前页面!

8.验证删除选中是否成功。是否弹出:删除成功!

1.检测页面是否正常显示

在MusicListTest添加testmusiclistpage()

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class MusicListTest extends commonDriver {

    private static EdgeDriver driver = getDriver();

    /**
     * 检测页面是否正常显示
     */
    @Test
    @Order(1)
    public void testmusiclistpage() {
        //验证输入框是否存在
        driver.findElement(By.cssSelector("#exampleInputName2"));
        //搜索按钮
        driver.findElement(By.cssSelector("#submit1"));
        //表格->选择
        driver.findElement((By.cssSelector("#body > div.container > table > tbody:nth-child(1) > tr > th:nth-child(1)")));
        //表格->歌名
        driver.findElement(By.cssSelector("#body > div.container > table > tbody:nth-child(1) > tr > th:nth-child(2)"));
        //表格->歌手
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[3]"));
        //表格->歌曲
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[4]"));
        //表格->操作
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[5]"));

        //-------------------------------------------------------------------------------------------------
        //第一行歌曲->选择框
        driver.findElement(By.xpath("//*[@id=\"80\"]"));
        //第一行歌曲->歌名
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr[1]/td[1]"));
        //第一行歌曲->歌曲作者
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr[1]/td[3]"));

        //---------------------------------------------------------------------------------

        //喜欢列表按钮
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/div[2]/a[1]"));
        //添加歌曲按钮
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/div[2]/a[2]"));
        //删除选中按钮
        driver.findElement(By.xpath("//*[@id=\"delete\"]"));
    }
}

2.验证模糊查询是否成功

在MusicListTest添加testSearch()

    /**
     * 验证模糊查询是否成功
     * @param key
     */
    @ParameterizedTest
    @CsvSource({"G"})
    @Order(2)
    public void testSearch(String key) {
        // 输入查询条件并点击查询按钮
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys(key);
        driver.findElement(By.cssSelector("#submit1")).click();

        // 验证查询结果是否符合预期
        driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(2)"));
        driver.findElement(By.cssSelector("#info > tr:nth-child(2) > td:nth-child(2)"));
    }

3.不输入是否能查询全部音乐

在MusicListTest添加clickNullCheck()

    /**
     * 不输入是否能查询全部音乐
     */
    @Test
    @Order(3)
    public void clickNullCheck() {
        //清空搜索框
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
        //查询空字符是否显示全部歌曲
        driver.findElement(By.cssSelector("#submit1")).click();
        //获取其中一个歌曲是否正常显示
        driver.findElement(By.cssSelector("#info > tr:nth-child(2) > td:nth-child(2)"));
    }

4.是否可以播放音乐

在MusicListTest添加testPlay()

    /**
     * 是否可以播放音乐
     * @throws InterruptedException
     */
    @Test
    @Order(4)
    public void testPlay() throws InterruptedException {
        // 点击第一行的播放音乐按钮
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr[1]/td[5]/button")).click();
        Thread.sleep(5000);
    }

5.是否能收藏音乐

在MusicListTest添加failloveMusic()

    /**
     * 是否能收藏音乐
     */
    @Test
    @Order(5)
    public void failloveMusic() throws InterruptedException, IOException {
        //点击第一首喜欢收藏按钮
        driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(8) > button")).click();
        Thread.sleep(500);
        Alert alert = driver.switchTo().alert();
        //验证弹出是否已经符合
        assertEquals("收藏成功!", alert.getText());
        alert.accept();
    }

6.是否能收藏音乐

在MusicListTest添加loveMusic()

    /**
     * 是否能收藏音乐
     */
    @Test
    @Order(6)
    public void loveMusic() throws InterruptedException {
        //点击第一首喜欢收藏按钮
        driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(8) > button")).click();
        Thread.sleep(500);
        Alert alert = driver.switchTo().alert();
        //验证弹出是否已经符合
        assertEquals("收藏失败!", alert.getText());
        alert.accept();
    }

7.验证删除按钮是否能够删除

在MusicListTest添加loveMusic()

    /**
     * 验证删除按钮是否能够删除
     * @throws InterruptedException
     */
    @Test
    @Order(7)
    public void testDelete1() throws InterruptedException {
        //点击第四首音乐的删除按钮
        driver.findElement(By.cssSelector("#info > tr:nth-child(4) > td:nth-child(7) > button")).click();
        Thread.sleep(500);
        // 处理弹窗
        Alert alert = driver.switchTo().alert();
        //弹窗是否符合预期
        Assertions.assertEquals("删除成功,重新加载到当前页面!", alert.getText());
        alert.accept();
    }

8.验证删除选中是否成功

在MusicListTest添加testDelete()

    /**
     * 验证删除选中是否成功
     * @throws InterruptedException
     */
    @Test
    @Order(8)
    public void testDelete() throws InterruptedException {
        // 勾选第二行,第三行的选择框
        driver.findElement(By.cssSelector("#\\31 45")).click();
        driver.findElement(By.cssSelector("#\\31 46")).click();

        // 点击删除选中按钮
        driver.findElement(By.xpath("//*[@id=\"delete\"]")).click();
        Thread.sleep(500);
        // 处理弹窗
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("删除成功!", alert.getText());
        alert.accept();
        Thread.sleep(500);
        //点击喜欢列表
        driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(1)")).click();
    }

3.3  喜欢列表页

1.检测喜欢列表页面是否正常显示

2.验证是否可以模糊查询。输入陈是否会显示包含陈的音乐

3.查询空字符是否显示全部歌曲

4.验证是否可以播放音乐。点击播放按钮是否播放,点击大播放按钮是否停止

5.验证取消收藏是否能够返回首页。是否出现弹出:删除成功,重新加载到当前页面!

1.检测页面是否正常显示

在LoveMusicListTest添加testmusiclistpage()

    /**
     * 检测页面是否正常显示
     */
    @Test
    @Order(1)
    public void testmusiclistpage() {
        //验证输入框是否存在
        driver.findElement(By.cssSelector("#exampleInputName2"));
        //搜索按钮
        driver.findElement(By.cssSelector("#submit1"));
        //表格->歌名
        driver.findElement(By.cssSelector("#body > div.container > table > tbody:nth-child(1) > tr > th:nth-child(1)"));
        //表格->歌手
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[2]"));
        //表格->歌曲
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[3]"));
        //表格->操作
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/table/tbody[1]/tr/th[4]"));

        //-------------------------------------------------------------------------------------------------

        //第一行歌曲->歌名
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr/td[1]"));
        //第一行歌曲->歌曲作者
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr/td[3]"));

        //---------------------------------------------------------------------------------

        //回到首页按钮
        driver.findElement(By.xpath("//*[@id=\"body\"]/div[1]/div[2]/a"));
    }

2.验证是否可以模糊查询

在LoveMusicListTest添加testSearchMusic()

    /**
     * 验证是否可以模糊查询
     * @param key
     */
    @ParameterizedTest
    @CsvSource({"陈"})
    @Order(2)
    public void testSearchMusic(String key) {

        // 在搜索框中输入音乐名称
        driver.findElement(By.cssSelector("#exampleInputName2")).sendKeys(key);
        // 提交搜索请求
        driver.findElement(By.cssSelector("#submit1")).click();
        // 断言搜索结果包含期望的音乐名称
        String text = driver.findElement(By.cssSelector("#info > tr:nth-child(1) > td:nth-child(1)")).getText();
        Assertions.assertEquals("陈奕迅 - 让我留在你身边", text);
    }

3.查询空字符是否显示全部歌曲

在LoveMusicListTest添加clickNullCheck()

    /**
     * 查询空字符是否显示全部歌曲
     */
    @Test
    @Order(3)
    public void clickNullCheck() {
        //清空搜索框
        driver.findElement(By.cssSelector("#exampleInputName2")).clear();
        //查询空字符是否显示全部歌曲
        driver.findElement(By.cssSelector("#submit1")).click();
        //验证其中一首是否正常显示
        driver.findElement(By.cssSelector("#info > tr > td:nth-child(1)"));
    }

4.验证是否可以播放音乐

在LoveMusicListTest添加clickNullCheck()

    /**
     * 验证是否可以播放音乐
     * @throws InterruptedException
     */
    @Test
    @Order(4)
    public void testPlayMusic() throws InterruptedException {
        // 找到第一个播放按钮并点击它
        driver.findElement(By.xpath("//*[@id=\"info\"]/tr/td[5]/button")).click();
        Thread.sleep(5000);

        // 断言音乐正在播放
        driver.findElement(By.cssSelector("#body > div:nth-child(3) > div")).click();

        String text = driver.findElement(By.cssSelector("#body > div:nth-child(3) > div > div > div.big-play-btn > a")).getText();
        Assertions.assertEquals("大播放按钮",text);
    }

5.验证取消收藏是否能够返回首页

在LoveMusicListTest添加testDeleteMusic()

    /**
     * 验证取消收藏是否能够返回首页
     */
    @Test
    @Order(5)
    public void testDeleteMusic() throws InterruptedException {
        // 找到第一个删除按钮并点击它
        driver.findElement(By.cssSelector("#info > tr > td:nth-child(6) > button")).click();
        Thread.sleep(500);
        // 处理确认对话框
        Alert alert = driver.switchTo().alert();
        Assertions.assertEquals("删除成功,重新加载到当前页面!", alert.getText());
        alert.accept();
    }

3.4 上传页面

1.上传页面是否正常显示

2.是否能够上传音乐

1.验证上传页面是否正常显示

创建uploadFileTest类

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class uploadFileTest extends commonDriver {
    private static EdgeDriver driver = getDriver();

    @AfterAll
    static void tearDown() throws Exception {
        // 关闭浏览器
        driver.quit();
    }

    /**
     * 验证上传页面是否正常显示
     * @throws Exception
     */
    @Test
    @Order(1)
    public void testUploadPage() {
        //选中文件按钮
        driver.findElement(By.cssSelector("#body > form > input[type=file]:nth-child(1)"));
        //文件上传文字是否存在
        driver.findElement(By.xpath("//*[@id=\"body\"]/form/text()[1]"));
        //歌手名是否存在
        driver.findElement(By.xpath("//*[@id=\"body\"]/form/text()[2]"));
        //上传按钮
        driver.findElement(By.cssSelector("#body > form > input[type=submit]:nth-child(3)"));
    }
}

2.上传音乐

在uploadFileTest类添加testUploadFile1()

    /**
     * 上传音乐
     * @throws Exception
     */
    @Test
    @Order(2)
    public void testUploadFile1() throws Exception {
        driver.findElement(By.cssSelector("#body > div.container > div:nth-child(3) > a:nth-child(2)")).click();
        String FILE_PATH = "C:\\Users\\26524\\Desktop\\杂物\\G_E_M_ 邓紫棋 - 错过不错.mp3";

        // 找到文件上传输入框,输入文件路径
        WebElement uploadInput = driver.findElement(By.name("filename"));
        uploadInput.sendKeys(FILE_PATH);

        // 找到上传按钮,点击上传
        WebElement submitButton = driver.findElement(By.xpath("//input[@type='submit']"));
        submitButton.click();
    }

3.5 创建测试套件

在common的包下创建test类,该类是用来指定哪些测试类需要运行, 以及运行顺序的.

@Suite
@SelectClasses({loginPage.class, MusicListTest.class,
        LoveMusicListTest.class, uploadFileTest.class})
public class test extends commonDriver{
}

运行测试套件, 程序执行结果 : 

 就此结束

Logo

一站式 AI 云服务平台

更多推荐