一.用户注册测试用例

from time import sleepfrom selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitfrom util import utilclass TestUserRegister(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.get('http://localhost:8080/jpress/user/register')self.driver.maximize_window()# 测试登录验证码错误def test_register_code_error(self):username = 'test001'email = 'test001@qq.com'pwd = '123456'confirmPwd = '123456'captcha = '666'expected = '验证码不正确'self.driver.find_element_by_name('username').send_keys(username)self.driver.find_element_by_name('email').send_keys(email)self.driver.find_element_by_name('pwd').send_keys(pwd)self.driver.find_element_by_name('confirmPwd').send_keys(confirmPwd)self.driver.find_element_by_name('captcha').send_keys(captcha)self.driver.find_element_by_class_name('btn').click()WebDriverWait(self.driver, 5).until(EC.alert_is_present())alert = self.driver.switch_to.alertassert alert.text == expectedalert.accept()sleep(5)# 测试注册成功def test_register_ok(self):username = util.gen_random_str()email = username + '@qq.com'pwd = '123456'confirmPwd = '123456'captcha = ''expected = '注册成功,点击确定进行登录。'self.driver.find_element_by_name('username').clear()self.driver.find_element_by_name('username').send_keys(username)self.driver.find_element_by_name('email').clear()self.driver.find_element_by_name('email').send_keys(email)self.driver.find_element_by_name('pwd').clear()self.driver.find_element_by_name('pwd').send_keys(pwd)self.driver.find_element_by_name('confirmPwd').clear()self.driver.find_element_by_name('confirmPwd').send_keys(confirmPwd)captcha = util.get_code(self.driver, 'captchaimg')self.driver.find_element_by_name('captcha').clear()self.driver.find_element_by_name('captcha').send_keys(captcha)self.driver.find_element_by_class_name('btn').click()WebDriverWait(self.driver, 5).until(EC.alert_is_present())alert = self.driver.switch_to.alertassert alert.text == expectedalert.accept()

问题

  1. showapi报错:不是有效的图片文件。
    该api需要图片url地址或者图片的base64编码,可利用base64模块将图片转换为base64编码解决该问题。

  2. 同时测试多个用例时,测试下一个前要将上一个的数据清空。否则会报错。

二.用户登录测试用例

from time import sleep
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitclass TestUserLogin(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.get('http://localhost:8080/jpress/user/login')self.driver.maximize_window()# 测试用户登录用户名错误def test_user_login_username_error(self):username = ''pwd = '123456'expected = '账号不能为空'self.driver.find_element_by_name('user').send_keys(username)self.driver.find_element_by_name('pwd').send_keys(pwd)self.driver.find_element_by_class_name('btn').click()WebDriverWait(self.driver, 5).until(EC.alert_is_present())alert = self.driver.switch_to.alertsleep(3)assert alert.text == expectedalert.accept()# self.driver.quit()def test_user_login_username_ok(self):username = 'admin'pwd = 'zq740208'expected = '用户中心'self.driver.find_element_by_name('user').clear()self.driver.find_element_by_name('user').send_keys(username)self.driver.find_element_by_name('pwd').clear()self.driver.find_element_by_name('pwd').send_keys(pwd)self.driver.find_element_by_class_name('btn').click()# 没有弹窗,直接跳到用户中心了WebDriverWait(self.driver, 5).until(EC.title_is(expected))sleep(3)assert self.driver.title == expectedself.driver.quit()

三.管理员登录测试用例

from time import sleep
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from util import utilclass TestAdminLogin(object):def __init__(self):self.driver = webdriver.Chrome()self.driver.get("http://localhost:8080/jpress/admin/login")self.driver.maximize_window()def test_admin_login_code_error(self):username = 'admin'pwd = 'zq740208'captcha = '666'expected = '验证码不正确,请重新输入'self.driver.find_element_by_name('user').send_keys(username)self.driver.find_element_by_name('pwd').send_keys(pwd)self.driver.find_element_by_name('captcha').send_keys(captcha)self.driver.find_element_by_class_name('btn').click()WebDriverWait(self.driver, 5).until(EC.alert_is_present())alert = self.driver.switch_to.alertassert alert.text == expectedalert.accept()sleep(5)def test_admin_login_code_ok(self):username = 'admin'pwd = 'zq740208'captcha = ''expected = 'JPress后台'self.driver.find_element_by_name('user').clear()self.driver.find_element_by_name('user').send_keys(username)self.driver.find_element_by_name('pwd').clear()self.driver.find_element_by_name('pwd').send_keys(pwd)captcha = util.get_code(self.driver, 'captchaImg')self.driver.find_element_by_name('captcha').clear()self.driver.find_element_by_name('captcha').send_keys(captcha)self.driver.find_element_by_class_name('btn').click()WebDriverWait(self.driver, 5).until(EC.title_is(expected))assert expected == self.driver.titlesleep(5)

四.文章分类测试用例

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleepclass TestCategory(object):def __init__(self, login):self.login = login# 测试文章分类失败,名称为空def test_add_category_error(self):name = ''parent = 'python'slug = 'test'expected = '×\n操作失败\n分类名称不能为空'# 点击文章self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/a/span[1]').click()sleep(1)# 点击分类self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/ul/li[3]/a').click()# 输入分类名称self.login.driver.find_element_by_name('category.title').send_keys(name)# 选择父分类parent_category_elem = self.login.driver.find_element_by_name('category.pid')Select(parent_category_elem).select_by_visible_text(parent)# 输入slugself.login.driver.find_element_by_name('category.slug').send_keys(slug)# 点击添加self.login.driver.find_element_by_xpath('/html/body/div/div/section[2]/div/div[1]/div/form/div[2]/div/div/button').click()loc = (By.ID, 'toast-container')WebDriverWait(self.login.driver, 5).until(EC.visibility_of_element_located(loc))msg = self.login.driver.find_element(*loc).textassert msg == expected# 测试文章分类成功def test_add_category_ok(self):name = 'test'parent = 'python'slug = 'test'expected = None# 点击文章self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/a/span[1]').click()# 点击分类self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/ul/li[3]/a').click()# 输入分类名称self.login.driver.find_element_by_name('category.title').clear()self.login.driver.find_element_by_name('category.title').send_keys(name)# 选择父分类parent_category_elem = self.login.driver.find_element_by_name('category.pid')Select(parent_category_elem).select_by_visible_text(parent)# 输入slugself.login.driver.find_element_by_name('category.slug').clear()self.login.driver.find_element_by_name('category.slug').send_keys(slug)# 点击添加self.login.driver.find_element_by_xpath('/html/body/div/div/section[2]/div/div[1]/div/form/div[2]/div/div/button').click()# 没有异常就代表成功assert 1 == 1

五.添加删除文章测试用例

调试程序过程中,sleep的设置很重要,需要等待网页完成相关操作再进入下一步,否则运行可能出错。

from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleepclass TestArticle(object):def __init__(self, login):self.login = logindef test_add_ok(self):title = '我的文章'content = '我的文章内容'expected = '×\n文章保存成功。'# 点击文章self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/a/span[1]').click()sleep(5)# 点击写文章self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/ul/li[2]/a').click()# 添加文章标题self.login.driver.find_element_by_id('article-title').send_keys(title)sleep(5)frame1 = self.login.driver.find_element_by_xpath('//*[@id="cke_1_contents"]/iframe')self.login.driver.switch_to.frame(frame1)sleep(1)self.login.driver.find_element_by_xpath('/html/body').send_keys(content)self.login.driver.switch_to.default_content()self.login.driver.find_element_by_xpath('//*[@id="form"]/div/div[2]/div[1]/div/button[1]').click()loc = (By.ID, 'toast-container')WebDriverWait(self.login.driver, 5).until(EC.visibility_of_element_located(loc))msg = self.login.driver.find_element(*loc).textassert msg == expected# 测试删除单个文章def test_delete_one_article_ok(self):# 点击文章self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/a/span[1]').click()sleep(2)# 点击文章管理self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/ul/li[1]/a').click()sleep(1)# 删除前文章数article_num = len(self.login.driver.find_elements_by_class_name('jp-actiontr'))link = self.login.driver.find_element_by_xpath('/html/body/div/div/section[3]/div/div/div/div[2]/table/tbody/tr[2]/td[2]/strong/a')ActionChains(self.login.driver).move_to_element(link).perform()sleep(1)del_elem = self.login.driver.find_element_by_xpath('/html/body/div/div/section[3]/div/div/div/div[2]/table/tbody/tr[2]/td[2]/div/div/a[3]')del_elem.click()sleep(1)# 删除后文章数article_num2 = len(self.login.driver.find_elements_by_class_name('jp-actiontr'))assert article_num == article_num2 + 1# 测试删除所有文章def test_delete_all_article_ok(self):# 点击文章# self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/a/span[1]').click()# sleep(2)# 点击文章管理self.login.driver.find_element_by_xpath('//*[@id="sidebar-menu"]/li[4]/ul/li[1]/a').click()sleep(1)self.login.driver.find_element_by_xpath('/html/body/div/div/section[3]/div/div/div/div[2]/table/tbody/tr[1]/th[1]/input').click()self.login.driver.find_element_by_id('batchDel').click()WebDriverWait(self.login.driver, 5).until(EC.alert_is_present())alert = self.login.driver.switch_to.alertalert.accept()sleep(5)article_num = len(self.login.driver.find_elements_by_class_name('jp-actiontr'))assert article_num == 0

selenium项目实战(四):完成测试用例相关推荐

  1. 【Selenium项目实战】项目环境搭建:安装JDK、mysql、Tomcat、jpress和测试系统

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210416. [Selenium项目实战] 项目环境搭建:安装JDK.mysql.Tomcat.jpress和测试系统 需求分 ...

  2. flutter 项目实战四 列表数据展示

    本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用. 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置 flutter 项目实战 ...

  3. html项目_Python Selenium项目实战之添加发送HTML测试报告邮件!

    说明 继第一个实战项目的基础上添加自动发送报告邮件接口,代码有部分调整 变动 1.增加文本文档SendToUserinfo.txt 用来保存邮件接收者的信息 2.修改测试报告文件名称格式并添加repr ...

  4. 爬虫项目实战四:爬取语录大全

    爬取语录大全 目标 项目准备 网站分析 反爬分析 每一页的链接分析 代码实现 效果显示 目标 爬取语录,批量下载到本地. 项目准备 软件:Pycharm 第三方库:requests,fake_user ...

  5. 基于React全家桶开发「网易云音乐PC」项目实战(四)

    前言 前言 hello大家好我是「风不识途」,如果首次阅读本系列请点击,正在学习React的小伙伴可以克隆该项目,参考学习,尝试做一些小功能,下面我们开始完成本系列最重要的音乐播放器列表▶需要完成内容 ...

  6. selenium项目实战(三):实现网页验证码识别

    步骤 截屏整个页面 获得验证码坐标数据 根据坐标数据抠图 使用pytesseract模块进行验证 问题: 利用save_screenshot和PIL模块的crop截取验证码区域时,截取不到正确的二维码 ...

  7. Java全栈(四)web网页技术:15.书城项目实战四:管理端图书的增删改查(后台)

    1.需求澄清 管理端图书管理页面[book_manager.jsp]页面原型如下: 需要实现图书的添加.删除.修改.分页显示等操作 2.前期准备 2.1 创建数据表books create TABLE ...

  8. android 视频沉浸式,Android项目实战(四十一):游戏和视频类型应用 状态栏沉浸式效果...

    原文: Android项目实战(四十一):游戏和视频类型应用 状态栏沉浸式效果 需求: 手机app ,当打游戏或者全屏看视频的时候会发现这时候手机顶部的状态栏是不显示的,当我们从手机顶端向下进行滑动或 ...

  9. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

最新文章

  1. c语言弟弟的作业,教弟弟做作业作文500字
  2. 在此处打开命令窗口_这样操作方便多了!简单DOS命令实用技巧详解
  3. 研效优化实践:Python单测——从入门到起飞
  4. Javascript 常用技巧 [2]
  5. css3制作广告栏效果的疑问?
  6. iphone xcode for lion 下载地址
  7. 深度学习推荐模型-WideDeep
  8. memcached(五)--源码分析,启动
  9. 深度图补全-depth inpainting
  10. 记录一下我的蓝牙遥控小车
  11. 2019年密码与安全新技术讲座-课程总结报告
  12. y470 bios uefi_AMD又能开核?刷完BIOS后性能白给,这次血赚了
  13. c++builder读取系统时间Now函数
  14. globalThis is not defined 解决方案
  15. vue+vant图片上传压缩图片大小
  16. 给中国学生的第三封信——成功、自信、快乐
  17. SAP SE16N 如何显示英文
  18. python中判断一个数是否为素数_【转载】Python脚本判断一个数是否为素数的几种方法...
  19. 【大学物理学】狭义相对论
  20. Eboot 软件框架

热门文章

  1. mapbox 图层顺序显示
  2. [转]Bram和Dram的区别
  3. Makefile中的ifeq 多条件使用
  4. 2021,瑞幸咖啡“向新而生”
  5. 三星html查看器怎么取消默认,三星galaxy note各种使用小技巧
  6. 三星note20u计算机功能,三星note20和note20u有什么区别 三星note20和note20u区别在哪 - 云骑士一键重装系统...
  7. 用Mathematica和Wolfram语言打造奥斯卡最佳视觉效果
  8. 信息可视化中的时间线设计,不懂的过来
  9. OneToMany 查询
  10. Android下的指纹识别及登陆