selenium之unittest框架重构项目实例

在这里插入图片描述

先看一下登录的例子:

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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值