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

目录

前言

一、主要技术

二、测试环境的准备部署

三、测试用例

四、执行测试

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);
    }

测试结果:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux基础】Vim保姆级一键配置教程(手把手教你把Vim打造成高效率C++开发环境)

目录 一、前言 二、安装Vim 三、原始Vim编译器的缺陷分析 四、Vim配置 &#x1f95d;预备知识----.vimrc 隐藏文件 &#x1f34b;手动配置 Vim --- &#xff08;不推荐&#xff09; &#x1f347;自动化一键配置 Vim --- (强烈推荐) ✨功能演示 五、共勉 一、前言 Vim作为…

如何8步完成hadoop单机安装

前言 Hadoop是一个开源框架&#xff0c;用于存储和处理大规模数据集。 系统要求 Ubuntu 20.044GB&#xff08;建议8GB&#xff09;hadoop-3.3.6 步骤1&#xff1a;更新系统 打开终端并输入以下命令来更新您的系统&#xff1a; apt update 步骤2&#xff1a;安装Java Had…

NSSCTF Web方向的例题和相关知识点(一)

[SWPUCTF 2021 新生赛]jicao 解题&#xff1a; 打开环境&#xff0c;是一段php代码 包含了flag.php文件&#xff0c;设定了一个POST请求的id和GET请求的json 语句会对GET请求的数据进行json解码 如果id和json变量的值都等于设定字符串&#xff0c;则得到 flag 我们可以使用…

测试人的福音:开源流量回放工具快速上手实践

笔者前段时间在参加测开大会时了解到了一款开源的自动化回归测试工具 AREX。主要是通过复制线上真实流量到测试环境进行回归测试&#xff0c;同时还做到了接口返回值的比对和写接口的验证&#xff0c;回放不会产生真实的数据或者调用&#xff0c;都是基于 Mock 数据的&#xff…

VastGaussian:用于大型场景重建的巨大3D高斯函数

VastGaussian:用于大型场景重建的巨大3D高斯函数 摘要IntroductionRelated WorkPreliminariesMethod VastGaussian: Vast 3D Gaussians for Large Scene Reconstruction. 摘要 现有基于NeRF的大型场景重建方法在视觉效果和渲染速度方面往往存在限制。虽然最近的3D高斯分裂在小…

基于Python的校园舆情管理系统(附源码、文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

SpringAMQP-消息转换器

这边发送消息接收消息默认是jdk的序列化方式&#xff0c;发送到服务器是以字节码的形式&#xff0c;我们看不懂也很占内存&#xff0c;所以我们要手动设置一下 我这边设置成json的序列化方式&#xff0c;注意发送方和接收方的序列化方式要保持一致 不然回报错。 引入依赖&#…

微信小程序之转盘抽奖

1. 实现效果 2. 实现过程 话不多说&#xff0c;直接上代码 /**index.wxml */ <view class"title">旋转大转盘</view> <view class"rote-box fcc"><view class"box fcc"><image class"bg" src"/stat…

亚马逊跨境电商,如何制作产品安装视频二维码?

对于海外电商平台的商家来说&#xff0c;售后的客服工作也非常重要。产品破损、物流延误&#xff0c;或者使用体验不好、产品安装太复杂、缺少一个零件、发错颜色……任何一个新增的差评都够商家头疼好久&#xff0c;说服买家修改或者删除差评总要费很大工夫。 所以&#xff0…

【Python贪吃蛇】:编码技巧与游戏设计的完美结合

文章目录 &#x1f525;一、运行效果&#x1f4a5;二、游戏教程✈1. 导入模块❤️2. 初始化游戏元素☔3. 改变蛇移动的方向&#x1f44a;4. 绘制方块&#x1f680;5. 检查蛇头是否在游戏区域内&#x1f308;6. 定义蛇的移动函数&#x1f3ac;7. 绑定键盘事件 ⭐三、完整代码 &a…

探索美国动态IP池:技术赋能下的网络安全新篇章

在数字化飞速发展的今天&#xff0c;网络安全成为了各行各业关注的焦点。特别是在跨国业务中&#xff0c;如何保障数据的安全传输和合规性成为了企业面临的重要挑战。美国动态IP池作为一种新兴的网络技术&#xff0c;正逐渐走进人们的视野&#xff0c;为网络安全提供新的解决方…

LeetCode 0994.腐烂的橘子:广度优先搜索(BFS)

【LetMeFly】994.腐烂的橘子&#xff1a;广度优先搜索(BFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/rotting-oranges/ 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子…

韵搜坊(全栈开发)-- 项目介绍

文章目录 项目介绍技术栈前端后端 业务流程 后端地址&#xff1a; https://github.com/IMZHEYA/zhesou-backend 前端地址&#xff1a; https://github.com/IMZHEYA/zhesou-frontend 图标设计&#xff08;AI生成&#xff09;&#xff1a; 项目介绍 一个聚合搜素平台&#xff…

SaToken框架实现在Rpc上下文的login处理逻辑

最近在工作中遇到一个需求&#xff0c;需要在项目A中实现一个rpc接口供其他项目调用&#xff0c;接口返回登录token&#xff0c;从而实现其他项目的用户能免密登录到项目A。 项目A是用了SaToken来做的鉴权&#xff0c;原本我的打算是直接在rpc中调用StpUtil.login()方法来实现登…

速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术

在现代汽车工业中&#xff0c;车辆的电子控制单元&#xff08;ECU&#xff09;之间的通信至关重要。这种通信大多通过控制器局域网络&#xff08;CAN&#xff09;总线实现&#xff0c;它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…

【数据结构】之栈的应用——有效的括号

文章目录 有效的括号 有效的括号 原题链接&#xff1a;有效的括号 详解栈的链接 这道题可以利用栈来解决 1.左括号入栈 2.右括号与出栈顶左括号匹配 //创建一个动态的栈 typedef char STDateType; typedef struct Stack {STDateType* a;//储存指定数据类型的数组int top…

Verilog中信号发生器的代码实现

目录 描述 输入描述&#xff1a; 输出描述&#xff1a; 描述 题目描述&#xff1a; 请编写一个信号发生器模块&#xff0c;根据波形选择信号wave_choise发出相应的波形&#xff1a;wave_choice0时&#xff0c;发出方波信号&#xff1b;wave_choice1时&#xff0c;发出锯齿…

栈的实现与OJ括号匹配

今日备忘录: "不破不立. " 本文索引 1. 前言2. 顺序表与链表的区别3. 什么是栈4. 栈的实现5. OJ括号匹配6. 总结 1. 前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢…

CSS3私有前缀+新增盒模型相关属性+新增背景属性(如果想知道CSS3私有前缀、新增盒模型相关属性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;CSS3 是CSS2 的升级版本&#xff0c;它在CSS2 的基础上&#xff0c;新增了很多强大的新功能&#xff0c;从而解决一些实际面临的问题。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本篇文章的…

解聘7名教授!高校取消终身教授制度,启动全员“末位淘汰”

如今&#xff0c;高校是越来越卷了&#xff0c;身处其中的每个人似乎都无法避免。 前一段时间&#xff0c;国内某985高校说是要搞职称降级聘任&#xff0c;另一所985高校说要淘汰多少比例的教师&#xff0c;引发学术圈广泛讨论。 国外呢&#xff0c;同样要卷起来了&#xff0…