网页版五子棋的自动化测试

news2024/11/28 2:36:04

目录

前言

一、主要技术

二、测试环境的准备部署

三、测试用例

四、执行测试

4.1、公共类设计

创建浏览器驱动对象

测试套件

释放驱动类

4.2、功能测试

登录页面

注册页面

游戏大厅页面

游戏房间页面

测试套件结果 

4.3、界面测试

登录页面

注册页面

游戏大厅页面

游戏房间页面


前言

        在五子棋对战项目的基础上进行自动化测试,已知此项目由用户模块、匹配模块、对战模块构成。用户模块包含用户的注册和登录,管理用户的天梯分数、比赛场数、获胜场数等信息;匹配模块包含依据用户的天梯积分,实现匹配机制;对战模块包含把两个匹配到的玩家放到一个游戏房间中,对方通过网页的形式来进行对战比赛。

        整体对项目进行自动化测试分为设计测试用例和进行测试两方面

一、主要技术

        整体测试流程主要涉及谷歌浏览器驱动 ChromeDriver + 自动化测试工具selenium4 + 单元测试框架Junit5。

selenium是一款开源免费的web自动化测试工具,支持多浏览器,支持多系统,支持多语言,而且其中提供了很多可供测试的API,使用十分便捷。

JUnit是一款Java单元测试的工具,用于优化我们的自动化脚本。

二、测试环境的准备部署

在pom导入要依赖的包

        <dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>4.10.0</version>
		</dependency>
		<!--保存屏幕截图文件所要用到的包        -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>1.4</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>

三、测试用例

四、执行测试

4.1、公共类设计

创建浏览器驱动对象

由于每次测试都需要创建一个浏览器驱动对象造成资源和时间的浪费,所以可以创建一个公共类用来创建浏览器驱动对象

public class AutotestUtils {
    public static ChromeDriver chromeDriver;
    public static EdgeDriver edgeDriver;

    //创建驱动对象
    public static ChromeDriver createChromeDriver(){
        //驱动创建好了、没有创建
        if (chromeDriver==null){
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--remote-allow-origins=*");
            chromeDriver=new ChromeDriver(options);
            //隐式等待
            Duration duration = Duration.ofSeconds(10);
            long millis = duration.toMillis();
            chromeDriver.manage().timeouts().implicitlyWait(millis, TimeUnit.MILLISECONDS);
        }
        return chromeDriver;
    }

    public static EdgeDriver createEdgeDriver(){
        //驱动创建好了、没有创建
        if (edgeDriver==null){
            EdgeOptions options = new EdgeOptions();
            options.addArguments("--remote-allow-origins=*");
            edgeDriver=new EdgeDriver(options);
            //隐式等待
            edgeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        }
        return edgeDriver;
    }
}

测试套件

使用suite测试套件来进行测试,指定类来运行用例

@Suite
@SelectClasses({LoginFunctionTest.class, driverQuitTest.class})
public class runSuite {
}

释放驱动类

单独写一个释放驱动类

public class driverQuitTest extends AutotestUtils {
    public static ChromeDriver chromeDriver;
    public static EdgeDriver edgeDriver;

    @Test
    static void driverQuit(){
        if (chromeDriver!=null){
            chromeDriver.quit();
        }else if (edgeDriver!=null){
            edgeDriver.quit();
        }else {
            chromeDriver.quit();
            edgeDriver.quit();
        }
    }
}

4.2、功能测试

登录页面

首先定义浏览器对象和url

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/login.html");
    }

测试错误的用户名和密码

    /**
     * 测试用户名或者密码错误
     */
    @ParameterizedTest
    @CsvSource({"baekhyun,1999","bb,1993"})
    @Order(1)
    void testLoginErrorUser(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            //登录失败的结果进行检测
            String except="登录失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试用户名为空

    /**
     * 测试空的用户名
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource({",1999",",1993"})
    void testLoginNullUser(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            if (password!=null){
                chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            }
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            //等待一秒钟
            Thread.sleep(1000);

            //登录失败的结果进行检测
            String except="登录失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试密码为空

    /**
     * 测试空的密码
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(3)
    @ParameterizedTest
    @CsvSource({"baekhyun,","bb,"})
    void testLoginNullPassword(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            if (username!=null){
                chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            }
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            //等待一秒钟
            Thread.sleep(1000);

            //登录失败的结果进行检测
            String except="登录失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试用户名或密码出现特殊符号

    /**
     * 测试特殊字符
     */
    @Order(4)
    @ParameterizedTest
    @CsvSource({"$^*(,1999","krystal,#^&**((*"})
    void testLoginPartUser(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            //等待一秒钟
            Thread.sleep(1000);

            //登录失败的结果进行检测
            String except="登录失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

检测多开是否能正常登录

    /**
     * 测试多开
     */
    @Order(5)
    @Test
    void testTwoUser() throws InterruptedException {
        edgeDriver.get("http://49.232.185.203:9999/login.html");
        //使用隐式等待渲染页面完成
        edgeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(18));
        edgeDriver.findElement(By.cssSelector("#username")).clear();
        edgeDriver.findElement(By.cssSelector("#password")).clear();
        edgeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        edgeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        edgeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        Alert alert2=edgeDriver.switchTo().alert();
        alert2.accept();
        edgeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        Alert alert3=chromeDriver.switchTo().alert();
        alert3.accept();
        Thread.sleep(1000);

        String except="当前检测到了多开,请使用其他账号登录!";
        Alert alert=chromeDriver.switchTo().alert();
        String actual=alert.getText();
        Assertions.assertEquals(except,actual);
        Thread.sleep(1000);
        alert.accept();
        edgeDriver.quit();
    }

测试正确的用户名和密码

    /**
     * 测试正确登录
     */
    @Order(5)
    @ParameterizedTest
    @CsvSource({"baekhyun,1992"})
    void testLoginSuccess(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            //等待一秒钟
            Thread.sleep(1000);

            //登录失败的结果进行检测
            String except="登录成功!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试结果:

注册页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/register.html");
    }

测试空的用户名

    /**
     * 测试空的用户名
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(1)
    @ParameterizedTest
    @CsvSource({",1999"})
    public void testRegisterNullUsername(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            if (password!=null){
                chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            }
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            String except="注册失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试空的密码

    /**
     * 测试空的密码
     * @param username
     * @param password
     * @throws InterruptedException
     */
    @Order(2)
    @ParameterizedTest
    @CsvSource({"hahaha,"})
    public void testRegisterNullPassword(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            if (username!=null){
                chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            }
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            String except="注册失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试用户已存在

    /**
     * 测试用户已存在
     */
    @Order(3)
    @ParameterizedTest
    @CsvSource({"baekhyun,1933"})
    public void testRegisterUserExit(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            String except="注册失败!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试用户名或密码中含有特殊字符

    /**
     * 测试用户名或密码中含有特殊字符
     */
    @Order(4)
    @ParameterizedTest
    @CsvSource({"%^^&*^*,1999","bakkk,%&&*&*&("})
    public void testRegisterPartUser(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            String except="注册成功!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
            chromeDriver.navigate().back();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试正常注册

    /**
     * 测试正常注册
     */
    @Order(5)
    @ParameterizedTest
    @CsvSource({"ccc,199923"})
    public void testRegisterSuccess(String username,String password) throws InterruptedException {
        try {
            chromeDriver.findElement(By.cssSelector("#username")).clear();
            chromeDriver.findElement(By.cssSelector("#password")).clear();
            chromeDriver.findElement(By.cssSelector("#username")).sendKeys(username);
            chromeDriver.findElement(By.cssSelector("#password")).sendKeys(password);
            chromeDriver.findElement(By.cssSelector("#submit")).click();

            Thread.sleep(1000);

            String except="注册成功!";
            Alert alert=chromeDriver.switchTo().alert();
            String actual=alert.getText();
            System.out.println("alert:"+actual);
            Assertions.assertEquals(except,actual);
            alert.accept();
        }catch (NoAlertPresentException e){
            System.out.println("没有发现警告窗!");
        }catch (UnhandledAlertException e){
            System.out.println("警告窗文本与预期不符合!");
        }
    }

测试结果:

游戏大厅页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl() throws InterruptedException {
        chromeDriver.get("http://49.232.185.203:9999/login.html");
        //使用隐式等待渲染页面完成
        chromeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(18));
        chromeDriver.findElement(By.cssSelector("#username")).clear();
        chromeDriver.findElement(By.cssSelector("#password")).clear();
        chromeDriver.findElement(By.cssSelector("#username")).sendKeys("baekhyun");
        chromeDriver.findElement(By.cssSelector("#password")).sendKeys("1992");
        chromeDriver.findElement(By.cssSelector("#submit")).click();
        Thread.sleep(1000);
        Alert alert=chromeDriver.switchTo().alert();
        alert.accept();
        chromeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

测试登录状态下,按钮能否正常点击并且文字变为匹配中

    /**
     * 测试登录状态下,按钮能否正常点击并且文字变为匹配中
     */
    @Test
    void testButton() throws InterruptedException {
        Thread.sleep(1000);
        String word=chromeDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(word,"开始匹配");
        Thread.sleep(1000);
        chromeDriver.findElement(By.cssSelector("#match-button")).click();
        //强制等待
        Thread.sleep(1000);
        word=chromeDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(word,"匹配中...(点击停止)");
    }

测试再次点击之后文字是否变为开始匹配

    /**
     * 测试再次点击后文字是否变为开始匹配
     */
    @Order(2)
    @Test
    void testButton2() throws InterruptedException {
        Thread.sleep(1000);
        String word=chromeDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(word,"匹配中...(点击停止)");
        Thread.sleep(1000);
        chromeDriver.findElement(By.cssSelector("#match-button")).click();
        //强制等待
        Thread.sleep(1000);
        word=chromeDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(word,"开始匹配");
    }

测试两个用户点击匹配是否能匹配成功

    /**
     * 测试两个用户点击匹配是否能匹配成功
     */
    @Test
    void jionSuccess() throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#match-button")).click();
        edgeDriver.findElement(By.cssSelector("#match-button")).click();
        Thread.sleep(1000);
        String url1=chromeDriver.getCurrentUrl();
        String url2= edgeDriver.getCurrentUrl();
        Assertions.assertEquals("http://49.232.185.203:9999/game_room.html",url1);
        Assertions.assertEquals("http://49.232.185.203:9999/game_room.html",url2);
    }

测试结果:

游戏房间页面

检测下棋过程中是否有提示语

    /**
     * 测试下棋过程中是否有提示语
     */
    @Test
    void testGameRoomText() throws InterruptedException {
        chromeDriver.findElement(By.cssSelector("#match-button")).click();
        edgeDriver.findElement(By.cssSelector("#match-button")).click();
        Thread.sleep(1000);
        String text1=chromeDriver.findElement(By.cssSelector("#screen")).getText();
        String text2=edgeDriver.findElement(By.cssSelector("#screen")).getText();
        System.out.println(text1);
        System.out.println(text2);
        if (text1.equals("轮到你落子了!")){
            Assertions.assertEquals(text1,"轮到你落子了!");
        }else {
            Assertions.assertEquals(text1,"轮到对方落子了!");
        }
        if (text2.equals("轮到你落子了!")){
            Assertions.assertEquals(text2,"轮到你落子了!");
        }else {
            Assertions.assertEquals(text2,"轮到对方落子了!");
        }
    }

测试结果:

测试套件结果 

4.3、界面测试

登录页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/login.html");
    }

测试提交用户登录标题

    /**
     * 测试用户登录标题
     */
    @Test
    void testDenglu(){
        String loginText=chromeDriver.findElement(By.cssSelector("body > div.login-container > div > h3")).getText();
        Assertions.assertEquals(loginText,"登录");
    }

测试登录用户名输入框

    /**
     * 测试用户名输入框
     */
    @Test
    void testUserInput(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#username"));
        Assertions.assertNotNull(webElement);
    }

测试登录密码输入框

    /**
     * 测试密码输入框
     */
    @Test
    void testPasswordInput(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#password"));
        Assertions.assertNotNull(webElement);
    }

测试登录提交按钮

    /**
     * 测试提交按钮
     */
    @Test
    void testSubmit(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(webElement);
    }

测试登录提交按钮的文字

    /**
     * 测试提交按钮的文字
     */
    @Test
    void testSubmitText(){
        String submitText=chromeDriver.findElement(By.cssSelector("#submit")).getText();
        Assertions.assertEquals(submitText,"提交");
    }

测试结果:

注册页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/register.html");
    }

测试用户注册标题

    /**
     *测试用户注册标题
     */
    @Test
    void testRegister(){
        String registerText=chromeDriver.findElement(By.cssSelector("body > div.login-container > div > h3")).getText();
        Assertions.assertEquals(registerText,"注册");
    }

测试注册用户名输入框

    /**
     * 测试用户名输入框
     */
    @Test
    void testUserInput(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#username"));
        Assertions.assertNotNull(webElement);
    }

测试注册密码输入框

    /**
     * 测试密码输入框
     */
    @Test
    void testPasswordInput(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#password"));
        Assertions.assertNotNull(webElement);
    }

测试注册提交按钮

    /**
     * 测试提交按钮
     */
    @Test
    void testSubmit(){
        WebElement webElement=chromeDriver.findElement(By.cssSelector("#submit"));
        Assertions.assertNotNull(webElement);
    }

测试注册提交按钮文字

    /**
     * 测试提交按钮的文字
     */
    @Test
    void testSubmitText(){
        String submitText=chromeDriver.findElement(By.cssSelector("#submit")).getText();
        Assertions.assertEquals(submitText,"提交");
    }

测试结果:

游戏大厅页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/game_hall.html");
    }

测试匹配按钮

    /**
     * 测试按钮
     */
    @Test
    void testButton(){
        WebElement button=chromeDriver.findElement(By.cssSelector("#match-button"));
        Assertions.assertNotNull(button);
    }

测试匹配按钮上的文字

    /**
     * 测试按钮上的文字
     */
    @Test
    void testButtonText(){
        String buttonText=chromeDriver.findElement(By.cssSelector("#match-button")).getText();
        Assertions.assertEquals(buttonText,"开始匹配");
    }

测试导航栏

    /**
     * 测试导航栏
     */
    @Test
    void testNav(){
        WebElement nav=chromeDriver.findElement(By.cssSelector("body > div.nav"));
        Assertions.assertNotNull(nav);
    }

测试导航栏上的文字

    /**
     * 测试导航栏上的文字
     */
    @Test
    void testNavText(){
        String navText=chromeDriver.findElement(By.cssSelector("body > div.nav")).getText();
        Assertions.assertEquals(navText,"五子棋对战");
    }

测试用户信息块 

    /**
     * 测试用户信息块
     */
    @Test
    void testUserInfo(){
        WebElement screen=chromeDriver.findElement(By.cssSelector("#screen"));
        Assertions.assertNotNull(screen);
    }

测试结果:

游戏房间页面

首先定义浏览器对象和url

    /**
     * 1、浏览器对象
     * 2、访问登录页面的url
     */

    public static ChromeDriver chromeDriver=createChromeDriver();

    @BeforeAll
    static void baseControl(){
        chromeDriver.get("http://49.232.185.203:9999/game_room.html");
    }

测试棋盘

    /**
     * 测试棋盘
     */
    @Test
    void testChess(){
        WebElement chess=chromeDriver.findElement(By.cssSelector("#chess"));
        Assertions.assertNotNull(chess);
    }

测试导航栏

    /**
     * 测试导航栏
     */
    @Test
    void testNav(){
        WebElement nav=chromeDriver.findElement(By.cssSelector("body > div.nav"));
        Assertions.assertNotNull(nav);
    }

测试导航栏上的文字

    /**
     * 测试导航栏上的文字
     */
    @Test
    void testNavText(){
        String navText=chromeDriver.findElement(By.cssSelector("body > div.nav")).getText();
        Assertions.assertEquals(navText,"五子棋对战");
    }

测试提示语框

    /**
     * 测试提示语框
     */
    @Test
    void testScreen(){
        WebElement screen=chromeDriver.findElement(By.cssSelector("#screen"));
        Assertions.assertNotNull(screen);
    }

测试结果:

总结:目前针对网页版五子棋的测试如上述博客,由于部分用例无法进行自动化测试,所以进行相应的人工测试,且测试通过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1670910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.13网络编程

只要在一个电脑中的两个进程之间可以通过网络进行通信那么拥有公网ip的两个计算机的通信是一样的。但是一个局域网中的两台电脑上的虚拟机是不能进行通信的&#xff0c;因为这两个虚拟机在电脑中又有各自的局域网所以通信很难实现。 socket套接字是一种用于网络间进行通信的方…

基于微信小程序+JAVA Springboot 实现的【网上商城小程序】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称&#xff1a; 基于微信小程序的网上商城 项目技术栈 该项目采用了以下核心技术栈&#xff1a; 后端框架/库&#xff1a; Java, SSM框架数据库&#xff1a; MySQL前端技术&#xff1a; 微信开发者工具&#xff0c;微信小程序框架 项目展示 5.1 管理员服务…

链表+环-链表是否有环的判断

链表是否有环的判断 在数据结构中&#xff0c;链表是一种常见的数据结构&#xff0c;它允许我们在不需要预先知道数据总量的情况下进行数据的动态存储。然而&#xff0c;由于链表的特性&#xff0c;有时我们可能会遇到链表中出现环的情况&#xff0c;即链表的某个节点指向了链…

每日互动(个推)与您相约2024 AI+研发数字峰会(AiDD)上海站

伴随着人工智能在众多行业领域的广泛应用及其带来的颠覆性变革&#xff0c;软件的开发模式、方式和实践也将发生巨大的变化。 5月17-18日&#xff0c;2024 AI研发数字峰会&#xff08;AiDD&#xff09;上海站即将重磅开幕。峰会设置了15个主题论坛&#xff0c;策划60精彩议题内…

道格拉斯普克算法(DP)的点云轮廓线简化

1、背景介绍 由于点云无法精确刻画目标对象边缘信息&#xff0c;因此常规提取的边缘点直接相连所生成的轮廓线&#xff0c;锯齿现象显著&#xff0c;与真实情况相差甚远&#xff08;图b所示&#xff09;。 道格拉斯-普克&#xff08;Douglas-Peuker&#xff09;抽稀算法是用来对…

java 使用hh或者HH异常

故障描述 使用了HH或者hh使用时间format、DatetimeFormat注解时序列化失败 故障原因 当使用hh的时候&#xff0c;小时只能是1-24 使用KK的时候&#xff0c;小时只能是0-23 比如&#xff1a;凌晨0:30&#xff0c;使用hh就是0:30 am&#xff0c; kk就是12:30 24小时制的话,使…

01-02-4

1、中级阶段-day1作业 使用的代码 #include<stdio.h> typedef struct Student {int num;char name[20];char sex; }Stu; int main() {Stu s;scanf("%d%s %c", &s.num, s.name, &s.sex);//读取字符串时&#xff0c;scanf()的占位符用%s即可&#xff0c…

重大升级 | OpenSCA SaaS全面接入供应链安全情报!

结合社区用户反馈及研发小伙伴的积极探索&#xff0c; OpenSCA 项目组再次发力&#xff0c;SaaS版本重大升级啦&#xff01; 用户的需求是OpenSCA前进的动力&#xff0c;欢迎更多感兴趣的朋友们积极试用和反馈~ 更 新 内 容 1.全面接入云脉XSBOM供应链安全情报 2.强大的资产…

【异常】SpringBoot整合RabbitMQ-发送消息报错

错误信息 reply-code406, reply-textPRECONDITION_FAILED - inequivalent arg ‘x-message-ttl’ for queue ‘hello-queue’ in vhost ‘/lq’: received none but current is the value ‘10000’ of type ‘signedint’, class-id50, method-id10 错误原因 hello-queue这…

省公派访学|社科老师赴世界名校牛津大学开展研究

F老师已获某省公派出国访学半年的资助&#xff0c;希望落实的学校尽量知名。但因为F老师只是硕士毕业而无博士学位&#xff0c;专业方向又是社科类&#xff0c;所以申请到世界知名高校有一定难度。经过努力&#xff0c;最终我们获得了世界顶尖高校-英国牛津大学的访问学者邀请函…

C++常见十种排序方式

目录 前言 1、选择排序 介绍 参考代码 2、冒泡排序 介绍 参考代码 3、插入排序 介绍 参考代码 4、希尔排序 介绍 参考代码 5、快速排序 介绍 参考代码 6、并归排序 介绍 参考代码 7、堆排序 介绍 参考代码 8、基数排序 介绍 参考代码 9、计数排序 介绍 参考代…

用户需求甄别和筛选的6大标准

产品经理日常经常接收到大量的需求&#xff0c;并不是所有的需求都需要开发&#xff0c;需要进行甄别和筛选&#xff0c;这样有利于确保项目的成功、优化资源利用以及提高产品质量。 那么针对这些用户需求进行甄别或筛选的评判标准是什么&#xff1f;需求筛选可以说是初步的需求…

设计模式-工厂模式设计与详解

一、设计模式介绍 设计模式是我们开发中常常需要面对的核心概念&#xff0c;它们是解决特定问题的模板或者说是经验的总结。这些模式被设计出来是为了让软件设计更加清晰、代码更加可维护且能应对未来的变化。良好的设计模式不仅能解决重复代码的问题&#xff0c;还能使团队中…

关于修改ant-design-vue的table组件背景色遇到闪动的问题

项目中需要修改表格的背景色为以下样式 修改完之后发现表格行还有个hover的背景色&#xff0c;于是再次重置样式如下 .ant-table-tbody > tr {&:hover {td {// background: red !important;background: transparent !important;}}}这样重置之后&#xff0c;hover的样式…

【中级软件设计师】上午题16-算法(应试考试简略版)

上午题16-算法 1 回溯法1.1 n皇后问题 2 分治法3 动态规划3.1 0-1背包问题3.2 最长公共子序列3.3 矩阵连乘 4 贪心算法5 分支限界法总结 1 回溯法 深度优先方法搜索 1.1 n皇后问题 2 分治法 一般来说&#xff0c;分治算法在每一层递归上都有3个步骤 &#xff08;1&#xff…

【C++】详解STL的适配器容器之一:优先级队列 priority_queue

目录 堆算法 概述 向下调整建堆 向上调整建堆 建堆算法 仿函数 概述 使用介绍 emtpy size top push pop 模拟实现 仿函数 框架 向下调整算法 向上调整算法 pop push empty top 要理解优先级队列&#xff0c;需要有如下知识 STL容器之一的vector&#xf…

嵌入式:基于STM32的RFID访问控制系统

在商业和住宅建筑中&#xff0c;访问控制系统是确保安全的关键组件。使用射频识别&#xff08;RFID&#xff09;技术&#xff0c;我们可以创建一个安全、方便的门禁系统。本教程将详细说明如何使用STM32微控制器实现RFID基础的门禁系统&#xff0c;该系统能够控制电子锁并记录访…

品鉴中的品鉴笔记:如何记录和分享自己的品鉴心得

品鉴云仓酒庄雷盛红酒的过程&#xff0c;不仅是品尝美酒&#xff0c;更是一次与葡萄酒深度对话的旅程。为了更好地记录和分享自己的品鉴心得&#xff0c;养成写品鉴笔记的习惯是十分必要的。 首先&#xff0c;选择一个适合的记录工具。可以是传统的笔记本&#xff0c;也可以是…

爆!1688「搜索推广」实操打法,8大要点快速上手!

想要1688平台上提高商品的搜索排名和曝光率&#xff0c;吸引更多的潜在客户并提升销量&#xff0c;店雷达将尽量具体地介绍相关操作方法和运营思路&#xff0c;建议大家收藏起来慢慢看。 一、了解1688平台搜索方式 1、品搜&#xff1a;这是买家最常用的搜索方式&#xff0c;通…

消息中间件是什么?有什么用?常见的消息中间件有哪些?

1.什么是消息中间件&#xff1f; 消息中间件基于队列模型在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。 2.现实中的痛点&#xff1a; 1.Http请求基于请求与响应的模型&#xff0c;在高并发的情况下&#xff0c;客户端发送大量的请求达到服务器端…