先看一下登录的例子:
from time import sleep
import unittest
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import pyautogui #通过定位坐标来找到元素
class TestUserLogin(unittest.TestCase):
#改成setup
@classmethod
def setUpClass(cls) -> None:
cls.driver = webdriver.Chrome()
cls.driver.get('http://localhost:8080/jpress/admin/login')
cls.driver.maximize_window()
# def __init__(self):
# self.driver = webdriver.Chrome()
# self.driver.get('http://localhost:8080/jpress/admin/login')
# self.driver.maximize_window()
# 测试用户登录,用户名错误
def test01_user_login_username_error(self):
# 用户名为空
username = '' #实际正确的是root
pwd = 'root'
expected = '信息提交错误'
# 输入用户名
self.driver.find_element_by_name('username').send_keys(username)
# 输入密码
self.driver.find_element_by_name('password').send_keys(pwd)
#勾选复选框(必须要用坐标定位)
elem=self.driver.find_element_by_xpath('//*[@id="loginform"]/div[3]/div[1]/div/label/input')
print(elem.rect) # 找到该坐标打印一下
rect = elem.rect
pyautogui.moveTo(rect['x'] + 10, rect['y'] + 130) # 10,130 就是移动像素
pyautogui.click()
# 点击登录
self.driver.find_element_by_class_name('btn').click()
# 等待提示框
WebDriverWait(self.driver, 5).until(EC.alert_is_present())
alert = self.driver.switch_to.alert
print(alert.text)
sleep(3)
# # 验证(断言)
# assert alert.text == expected
# alert.accept()
#改成unittest断言
self.assertEqual(alert.text,expected)
alert.accept()
# self.driver.quit()
# 测试用户登录成功
def test02_user_login_ok(self):
# 用户名为空
username = 'root'
pwd = 'root'
expected = 'JPress'
# 输入用户名
self.driver.find_element_by_name('username').clear()#为了把上面案例输入的值清空
self.driver.find_element_by_name('username').send_keys(username)
# 输入密码
self.driver.find_element_by_name('password').clear()
self.driver.find_element_by_name('password').send_keys(pwd)
# 点击登录
self.driver.find_element_by_class_name('btn').click()
# 等待提示框
WebDriverWait(self.driver, 5).until(EC.title_is(expected))
sleep(3)
#验证 因为没有弹窗 所以用到了title断言判断
assert self.driver.title == expected
# self.driver.quit()
#把关掉方法写到teardown中去
@classmethod
def tearDownClass(cls) -> None:
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
"""
#通过测试用例方法加载测试用例
#先初始化就是加载器
loader=unittest.TestLoader()
#测试套件
suite=unittest.TestSuite()
#加载案例 测试用例方法加载测试用例loadTestsFromTestCase
suite.addTest(loader.loadTestsFromTestCase(TestUserLogin))
#运行
runner=unittest.TextTestRunner()
runner.run(suite)
"""
文章分类重构
1.这里需要有一个登录依赖不太好解决,我这个代码没有运行通但是问题我也没找到,反正后期我会用到pytest框架再去重构,实际项目中也是用到pytest框架,对unittest框架做到了解即可!!!
# 文章分类
#注意下拉框选父级菜单时用到select方法
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 sleep
import unittest
from .test_user_login import TestUserLogin
class TestCategory(object):
#因为需要建立再登录之上的操作
#因为有依赖关系需要传参数所以就不用setup方法了
# @classmethod
# def setUpClass(cls) -> None:
# cls.login = TestUserLogin()
# runner = unittest.TextTestRunner()
# runner.run(cls.login)
def __init__(self,method,login):
unittest.TestCase.__init__(self,method)
# super.__init__(self, method)
self.login = login
# 测试文章分类失败,名称为空
def test01_add_category_error(self):
name = ''
# 前置条件 后置条件
parent = 'python'
slug = 'test'
expected = '名称不能为空!'
# 点击文章
#
self.login.driver.find_element_by_xpath('//*[@id="article"]/a/span').click()
sleep(1)
# 点击分类
self.login.driver.find_element_by_xpath('//*[@id="category"]/a').click()
sleep(1)
# 输入分类名称
self.login.driver.find_element_by_name('taxonomy.title').send_keys(name)
# 选择父分类
parent_category_elem = self.login.driver.find_element_by_name('taxonomy.parent_id')
# Select
Select(parent_category_elem).select_by_visible_text(parent)
# 输入slug
self.login.driver.find_element_by_name('taxonomy.slug').send_keys(slug)
# 点击添加
self.login.driver.find_element_by_xpath(
'//*[@id="form"]/button').click()
# 因为有弹窗所以需要切换到弹窗上
WebDriverWait(self.login.driver, 7).until(EC.alert_is_present())
alert = self.login.driver.switch_to.alert
# python 的断言
# 获取弹窗上的文字来比较
assert alert.text == expected
sleep(3)
alert.accept()
# 测试文章分类成功
def test02_add_category_ok(self):
name = 'test'
parent = 'python'
slug = 'test'
expected = None
# 点击文章
#
self.login.driver.find_element_by_xpath('//*[@id="article"]/a/span').click()
sleep(1)
# 点击分类
self.login.driver.find_element_by_xpath('//*[@id="category"]/a').click()
sleep(1)
# 输入分类名称
self.login.driver.find_element_by_name('taxonomy.title').clear()
self.login.driver.find_element_by_name('taxonomy.title').send_keys(name)
# 选择父分类
parent_category_elem = self.login.driver.find_element_by_name('taxonomy.parent_id')
# Select
Select(parent_category_elem).select_by_visible_text(parent)
# 输入slug
self.login.driver.find_element_by_name('taxonomy.slug').clear()
self.login.driver.find_element_by_name('taxonomy.slug').send_keys(slug)
# 点击添加
self.login.driver.find_element_by_xpath(
'//*[@id="form"]/button').click()
#没有异常就添加成功直接断言成功就好了
assert 1 == 1
def runTest(self):
self.test01_add_category_error()
self.test02_add_category_ok()
main函数下运行:
#测试unittest框架下文章分类
#以下代码 在main中测试
from testcases.unittest import test_user_login, test_category
import unittest
if __name__ == '__main__':
adminLoginCase = test_user_login.TestUserLogin('test02_user_login_ok')
categoryCase = test_category.TestCategory('test02_add_category_ok', adminLoginCase)
suite = unittest.TestSuite()
suite.addTest(adminLoginCase)
suite.addTest(categoryCase)
runner = unittest.TextTestRunner()
runner.run(suite)