Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【项目测试】博客系统—Selenium自动化测试、编写测试用例

【项目测试】博客系统—Selenium自动化测试、编写测试用例

作者头像
三三是该溜子
发布于 2025-02-26 01:23:54
发布于 2025-02-26 01:23:54
18100
代码可运行
举报
文章被收录于专栏:该溜子的专栏该溜子的专栏
运行总次数:0
代码可运行

零:导入

本系列文章将对博客系统项目进行自动化UI测试

1:UI测试

什么是UI测试呢——全称是用户界面测试(User Interface Testing)

这里包含用户界面的布局测试,元素的显示,功能是否完好等等,本文将主要对我们的功能方法进行自动化接口测试

2:XMind

这是一款脑图软件,我们可以利用这款软件,编写我们的测试用例,非常的方便,小伙伴们可以自行下载,以下测试用例使用XMind软件进行编写

一:项目介绍

1:访问链接

博客登陆页

用户名和密码后台私信阿华哈

2:主要测试页面

(1)登录页面
(2)博客列表页面
(3)博客详情页面
(4)发布博客页面

3:主要功能

用户登录,查看博客,发布博客,博客编辑

二:测试用例设计

三:创建blog_test测试文件

1:引入依赖

(1)selenium依赖
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0</version>
        </dependency>
(2)自动扫描更新浏览器驱动

简单理解即可:自动下载和配置浏览器所需的驱动——该库可以自动检测系统中安装的浏览器版本,并根据版本信息下载相应的 WebDriver 二进制文件,避免了手动下载和配置 WebDriver 的繁琐过程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.5.3</version>
        </dependency>
(3)主要用于屏幕截图

commons-io 是 Apache Commons 项目下的一个工具库,它提供了一系列用于处理输入输出(I/O)操作的实用类和方法,简化了 Java 中文件、流、字符串等的操作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

2:实现工具类

这里是我们测试常用的重复代码,主要是创建驱动和屏幕截图

(1)创建驱动对象
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 创建驱动对象
     * @return
     */
    public static WebDriver createDriver(){
        if(driver == null){
            WebDriverManager.chromedriver().setup();
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--remote-allow-origins");

            driver = new ChromeDriver(options);

            driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(2));
        }
        return driver;
    }
(2)屏幕截图

细节:

①截图按天为单位进行管理

②这一行代码是截图的核心

第一步:driver变量是WebDriver类型,代表一个浏览器驱动,TakeScreenshot是Selenium提供的接口,提供了屏幕截图方法

这里将 driver 对象强制转换为 TakesScreenshot 类型,在调用截图方法

注:不是所有的 WebDriver 实现类都能直接转换为 TakesScreenshot 类型,不过常见的浏览器驱动(如 ChromeDriver、FirefoxDriver 等)都实现了这个接口,所以这种转换通常是ok的

第二步:OutputType是 Selenium 提供的一个枚举类,定义了截图的输出类型是FILE文件!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 获取当前屏幕截图的时间
     */
    public List<String> getTime(){
        SimpleDateFormat sim1 = new SimpleDateFormat("yyyyMMdd-HHmmssSS");
        SimpleDateFormat sim2 = new SimpleDateFormat("yyyyMMdd");
        String fileName = sim1.format(System.currentTimeMillis());//文件格式名称,在集合中下标为1
        String dicName = sim2.format(System.currentTimeMillis());//文件夹格式名称,在集合中下标为0
        List<String> list = new ArrayList<>();
        list.add(dicName);
        list.add(fileName);
        return list;
    }

    /**
     * 获取屏幕截图
     */
    public void getScreenShot(String str) throws IOException {
        List<String> list = getTime();
        //dir+filename
// ./指的是当前的项⽬路径下,也就是blog_test下
// ./src/test/java/com/blogWebAutoTest/dirname/filename
// ./src/test/java/image/20230212/test01_20230212-123030毫秒.png
        String fileName = "./src/test/java/image/" + list.get(0) + "/" + str + "_" + list.get(1) + ".png";
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

        FileUtils.copyFile(srcFile,new File(fileName));
    }

四:登录页面测试

1:页面加载测试

这里我们可以检查页面上的元素是否能被找到,比如说,提交按钮,用户名,密码等等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 检查页面是否加载成功
     */
    public void loginPageRight(){
        driver.findElement(By.cssSelector("body > div.container-login > div > h3"));
        driver.findElement(By.cssSelector("#submit"));
    }

2:正常登录情况

第一步:我们需要先清空一下我们用户名和密码的输入框,很重要这一步,(不清空可能会和之前测试中的字符串拼接)

第二步:给两个输入框赋值

第三步:提交

第四步:检查是否登陆成功了呢?那看我们登陆成功后跳转的页面里的元素有没有加载出来嘿嘿~~

注:这里我们的屏幕截图方法传入的字符串参数,是当前类的名字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 检查正常登录情况
     */
    public void loginSuc() throws IOException {
        //每次登录前先清空一下我们的输入框
        driver.findElement(By.cssSelector("#username")).clear();
        driver.findElement(By.cssSelector("#password")).clear();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123456");
        driver.findElement(By.cssSelector("#submit")).click();

        //TODO:点击后通过检查页面元素判断是否登陆成功
        //这里挑选元素也是有讲究的:公共的都具备的特点,这里我找的是"文章"这个元素和"头像所处的那一个框框"

        driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)"));
        driver.findElement(By.cssSelector("body > div.container > div.left > div > div:nth-child(4) > span:nth-child(1)"));

        //断言
        String expected = driver.getTitle();
        assert expected.equals("博客列表页");

        getScreenShot(getClass().getName());
        driver.navigate().back();

    }

3:登录失败测试

这里的步骤其实跟上面类似

但是,有一个问题要注意:这里的弹窗不属于我们当前页面句柄管理,我们需要去切换句柄到弹窗,才能对弹窗做处理,处理完弹窗,句柄会自动切换回我们当前页面。

还有一个很ex的点:你去切换句柄到弹窗的时候,可能代码执行速度太快,当前弹窗元素还没加载出来呢,这就会报错

(1)错误展示

我们把这个显示等待注掉,就g了——NoAlertPresentException!!!!

(2)完整代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 测试登录失败
     */
    public void loginFail() throws IOException, InterruptedException {
        //TODO:确保登录输入框中是没有东西的
        //方法一:刷新页面
//        driver.navigate().refresh();
        //方法二:清除输入框中的内容,这里在登录输入框中已经实现

        driver.navigate().refresh();

        driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        driver.findElement(By.cssSelector("#password")).sendKeys("123");
        driver.findElement(By.cssSelector("#submit")).click();

//        String res = driver.findElement(By.cssSelector("body")).getText();//处理方式不同,操作不一样

        //处理弹窗
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));//就是加载的太慢了,纯逆天!!!!
        wait.until(ExpectedConditions.alertIsPresent());
        Alert alert = driver.switchTo().alert();
        String res = alert.getText();
        alert.accept();


        getScreenShot(getClass().getName());
//        System.out.println(res);
        assert res.equals("密码错误");

    }

五:博客详情页测试

1:页面加载测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ListPage extends AutotestUtils {
    public static String url = "http://39.105.158.244:8080/blog_list.html";
    public ListPage(){
        super(url);
    }

    /**
     * 检查博客页面是否能正常显示
     */
    public void listPageLoadRight() throws IOException {
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)"));
        getScreenShot(getClass().getName());
    }
}

六:博客发布页测试

1:检查发布博客功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package tests;

import common.AutotestUtils;
import org.openqa.selenium.By;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Hua YY
 * Date: 2025-02-23
 * Time: 15:25
 */
public class EditPage extends AutotestUtils {
    public static String url = "http://39.105.158.244:8080/blog_edit.html";
    public EditPage(){
        super(url);
    }

    /**
     * 检查写博客是否能正常发布
     */
    public void editSuc(){

        driver.findElement(By.cssSelector("#title")).sendKeys("我是大大怪");

        driver.findElement(By.cssSelector("#submit")).click();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
多用户网页在线聊天室(测试报告)
随着现代互联网的快速发展,实时通信系统已成为人们日常交流的重要工具。为了让这个聊天室既好用又稳定,项目里加了一套“自动检查”系统(自动化测试)。比如登录、加好友、发消息这些核心功能,不用手动一遍遍测,而是用写好的程序自动模拟操作,快速发现问题。这样一来,无论用哪种浏览器或者网络环境,聊天功能都能稳稳运行,用户体验更流畅。
黎鹤舞
2025/03/13
1451
多用户网页在线聊天室(测试报告)
【软件测试】博客系统项目测试报告(ssm项目)
项目概要:基于ssm项目的博客系统测试 项目相关技术栈:SpringBoot, SpringMVC ,MyBatis, MySQL, Redis, HTML, CSS, JavaScript 测试报告的目的:测试自己的博客项目是否符合预期结果. 范围和日期:2023年10月 测试执行的总体情况:主要针对常见功能进行测试例如:博客登录页面,博客列表页面,博客详情页,博客编辑页…
xxxflower
2023/10/16
5530
【软件测试】博客系统项目测试报告(ssm项目)
[测试报告]比特知识论坛
本项目是一个基于 SSM(Spring+SpringMVC+MyBatis)框架搭建的论坛系统。该系统为用户提供了一个开放、便捷的论坛交流平台。用户可以在论坛上发布主题帖、回复他人帖子,进行思想交流和问题讨论。系统具有完善的用户管理功能,包括注册、登录、个人资料设置等。通过 Spring 的依赖注入和面向切面编程,实现了代码的高内聚低耦合。MyBatis 方便地进行数据库操作,确保数据的高效存储和检索。SpringMVC 则负责处理用户请求和响应,提供流畅的用户体验。该论坛系统界面简洁美观,功能实用,能够满足不同用户的交流需求。
黎鹤舞
2025/03/11
1050
[测试报告]比特知识论坛
【测试篇】探秘自动化测试函数:解锁高效测试新路径
当然如果这里的元素是一个属性那么就要使用:getAttribute("属性名称")进行获取属性的操作;
用户11288949
2025/03/26
520
【测试篇】探秘自动化测试函数:解锁高效测试新路径
selenium-java web自动化测试工具
本篇文章由来,这两天整理了下自己经常使用而且很熟练的项目,今天突然想起漏了一个,补上了,但想到还没对应的博客,那就写一个简单的
肖哥哥
2018/08/02
2.9K0
selenium-java web自动化测试工具
【测试篇】对于项目的自动化测试经历和踩过的“坑”我有话要说
当然这里小编设计得比较粗糙,在其实在自动化测试中,有一些接口并没有进行测试,所以为了方便演示,选了几个有代表性的UI接口;
用户11288949
2025/03/27
930
【测试篇】对于项目的自动化测试经历和踩过的“坑”我有话要说
【软件测试】自动化测试selenium(二)
我们可以看到,submit和click的效果是一样的,但是submit存在一定的弊端: 如果点击的元素放在form标签中,此时使用submit实现的效果和click是一样的.如果点击的元素放在非form标签中,此时使用submit会报错! 如下:(此时submit操作的不是from标签下的元素)
xxxflower
2023/10/16
3790
【软件测试】自动化测试selenium(二)
《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
按计划今天宏哥继续讲解css的定位元素的方法。但是今天最后一种宏哥介绍给大家,了解就可以了,因为实际中很少用。
北京-宏哥
2021/08/20
1.4K0
《手把手教你》系列技巧篇(十九)-java+ selenium自动化测试-元素定位大法之By css下卷(详细教程)
自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)
Selenium 是功能强大的自动化测试工具集,是支持 Web 浏览器自动化的一系列工具和库的总括项目,一共包括以下三个项目:
痴者工良
2023/03/11
4.1K0
自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)
【软件测试】自动化常用函数
web ⾃动化测试的操作核⼼是能够找到⻚⾯对应的元素,然后才能对元素进⾏具体的操作。常⻅的元素定位⽅式⾮常多,如 id,classname,tagname,xpath,cssSelector 常⽤的主要由 cssSelector 和 xpath
椰椰椰耶
2024/11/19
1310
【软件测试】自动化常用函数
【UI自动化-2】UI自动化元素定位专题
UI自动化的学习,个人认为应该分五步走:环境搭建、元素定位、特殊场景处理、框架设计与搭建、测试平台开发。第一步的环境搭建其实没什么难度,都是固定的套路。今天就来到了第二步的元素定位,可以说元素定位是整个UI自动化的基本功。 我查阅了大量的资料,在动手实践的基础上,整理总结了此文。
云深i不知处
2020/09/16
2K0
Selenium
自动化测试指软件测试的自动化,在预设状态下运行应用程序或者系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。
橘子君丶
2024/04/10
2871
Selenium
Selenium的组成及特点
 商品信息:className="p-name"      商品价格:className="p-price"
用户10196776
2022/11/20
1.7K0
Selenium的组成及特点
《手把手教你》系列技巧篇(十七)-java+ selenium自动化测试-元素定位大法By css上卷
CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式。CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性。下面详细介绍CSS定位方式的使用方法。xpath定位是“屠龙刀”,那CSS定位就是"倚天剑了",相对CSS来说,具有语法简单,定位速度快等优点。
北京-宏哥
2021/09/13
1.5K0
​Java自动化测试 (元素定位 23)
使用脚本断点调试定位是否正确是一个方法,当时在我的实际工作中,元素定位代码的封装较深,所以修改查询元素的内容较麻烦,所以直接使用Xpath Helper可以方便的进行开发前的测试。不管是爬虫爬去页面内容还是自动化测试都很实用。
zx钟
2020/09/04
1.2K0
​Java自动化测试 (元素定位 23)
《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
按计划今天宏哥继续讲解倚天剑-css的定位元素的方法:ID属性值定位、其他属性值定位和使用属性值的一部分定位(这个类似xpath的模糊定位)。
北京-宏哥
2021/08/20
1.6K0
《手把手教你》系列技巧篇(十八)-java+ selenium自动化测试-元素定位大法之By css中卷(详细教程)
【UI自动化-3】UI自动化元素操作专题
在熟悉了元素定位之后,我们接下来就要学习对定位到的元素进行操作这项内容了。我简要做了个总结,如下图:
云深i不知处
2020/09/16
3K0
Selenium Webdriver 简易教程
Selenium RC和Selenium Webdriver是测试框架,提供多种语言的API。不同的是,Selenium Webdriver以一种更底层、更灵活的方式来操作浏览器,并不仅仅使用javascript。这样它可以绕开浏览器的沙箱限制,实现Selenium RC不支持的框架、弹出窗口、页面导航、下拉菜单、基于AJAX的UI元素等控件的操作。以及,Selenium Webdriver不需要本地服务器。
ApacheCN_飞龙
2019/02/15
5.3K0
Selenium安装以及案例演示【Java爬虫】
下载驱动包 http://chromedriver.storage.googleapis.com/index.html
天蝎座的程序媛
2022/11/18
2K0
Selenium Web自动化测试学习(一)
Java的环境变量目录怎么找呢?我们在刚开始学Java的时候肯定配置过环境变量,在高级系统设置中
RAIN7
2023/03/09
4960
Selenium Web自动化测试学习(一)
推荐阅读
相关推荐
多用户网页在线聊天室(测试报告)
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验