软件测试 python+selenium 学生宿舍管理系统完整代码记录

import unittest

from selenium import webdriver
from selenium.common import NoSuchElementException, TimeoutException
from selenium.webdriver import ActionChains, Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


class MyBigJOB(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(service=Service(r'C:\Users\86198\AppData\Local\Programs\Python\Python39\chromedriver-win64\chromedriver.exe'))
        self.driver.get("http://localhost:8080/")
# 准备共作
    def tearDown(self):
        self.driver.quit()

    ##  不同身份登录
    #  系统管理员
    def Login1(self,username,password):

        username_input = self.driver.find_element(By.XPATH, "//input[@placeholder='用户名']")
        password_input = self.driver.find_element(By.XPATH, "//input[@placeholder='密码']")
        username_input.clear()
        password_input.clear()
        username_input.send_keys(username)
        password_input.send_keys(password)
        role_button = self.driver.find_element(By.XPATH,'//*[@id="app"]/div/form/div[3]/div/label[1]/span[2]')
        role_button.click()
        time.sleep(3)
        login_button = self.driver.find_element(By.XPATH,'//*[@id="app"]/div/form/div[4]/div/button')
        login_button.click()


    #宿舍管理员
    def Login2(self,username,password):
        username_input = self.driver.find_element(By.XPATH, "//input[@placeholder='用户名']")
        password_input = self.driver.find_element(By.XPATH, "//input[@placeholder='密码']")
        username_input.clear()
        password_input.clear()
        username_input.send_keys(username)
        password_input.send_keys(password)
        role_button = self.driver.find_element(By.XPATH, '//*[@id="app"]/div/form/div[3]/div/label[2]/span[2]')
        role_button.click()
        time.sleep(3)
        login_button = self.driver.find_element(By.XPATH,'//*[@id="app"]/div/form/div[4]/div/button')
        login_button.click()

    # 验证登录成功
    def verify_login_success(self,who,name):
        time.sleep(3)
        try:
            #同根兄弟文本
            xpath_expression = f"//div[contains(text(), '{who}')]/parent::*/div[not(contains(text(), '{name}'))]"
            student_info = self.driver.find_element(By.XPATH, xpath_expression)
            self.assertIsNotNone(student_info, "登录成功")
        except NoSuchElementException:
            self.fail("登录失败: 无法找到指定的元素")
        except Exception as e:
            self.fail(f"登录失败: 发生异常 {e}")

    # 验证账密错误
    def verify_username_password_error(self, expected_message):
        try:
            error_message = WebDriverWait(self.driver, 12).until(
                EC.presence_of_element_located((By.CLASS_NAME, "el-form-item__error"))
            )
            self.assertEqual(error_message.text, expected_message, f"错误提示出现: {expected_message}")
        except Exception as e:
            self.fail(f"错误提示未出现: {e}")


    # 验证信息是否满足期望
    def verify_message(self, expected_message):
        error_message =self.driver.find_element(By.CLASS_NAME, "el-message-box__content")
        self.assertEqual(error_message.text, expected_message, f"服务异常弹窗出现:  期望 '{expected_message}' 但实际是 '{error_message.text}'")
        time.sleep(4)

    #input下方红字提示
    def text_message(self,expected_message):
        try:
            error_message = WebDriverWait(self.driver, 12).until(
                # 注解
                # def presence_of_element_located(locator: Tuple[str, str]) -> Callable[[WebDriverOrWebElement], WebElement]:
                # """An expectation for checking that an element is present on the DOM of a
                # page. This does not necessarily mean that the element is visible.
                #
                # locator - used to find the element
                # returns the WebElement once it is located
                # """
                #
                EC.presence_of_element_located((By.CLASS_NAME, "el-form-item__error"))
            )
            self.assertEqual(error_message.text, expected_message, f"错误提示出现: {expected_message}")
        except Exception as e:
            self.fail(f"错误提示未出现: {e}")
    ############################准备结束

    ############################通用功能:登录/注销

    def test_login_failure_scenarios(self):
        #均空时
        self.Login2('','')
        self.text_message('请确定输入非空')
        #获取用户名和密码
        userName = self.driver.find_element(By.XPATH, "//input[@placeholder='用户名']")
        password = self.driver.find_element(By.XPATH, "//input[@placeholder='密码']")
        #用户名为空时
        password.send_keys("123123")
        self.text_message('请确定输入非空')
        time.sleep(3)
        #用户名不存在时
        userName.send_keys('11')
        login_button = self.driver.find_element(By.XPATH, '//*[@id="app"]/div/form/div[4]/div/button')
        login_button.click()
        time.sleep(3)

        confirm_button = WebDriverWait(self.driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, "//button[contains(span, '确定')]"))
        )
        confirm_button.click()
        self.verify_message('用户名不存在')



    #点击退出登录点击取消/确定
    def click_and_verify_logout_dialog(self, logout_button, expected_text, confirm=False):
        logout_button.click()
        print("等待弹窗加载完...")
        message_element = WebDriverWait(self.driver, 5).until(
            lambda driver: driver.find_element(By.XPATH, "//div[@class='el-message-box__message']/p")
        )
        message_text = message_element.text
        self.assertEqual(expected_text, message_text, f"弹窗信息错误")

        if confirm:
            confirm_button = WebDriverWait(self.driver, 5).until(
                EC.element_to_be_clickable((By.XPATH, "//button[contains(span, '确定')]"))
            )
            confirm_button.click()
            time.sleep(2)
            print("已退出")
        else:
            cancel_button = WebDriverWait(self.driver, 5).until(
                EC.element_to_be_clickable((By.XPATH, "//button[contains(span, '取消')]"))
            )
            cancel_button.click()
            print("已取消登录,等待再次退出...")

    # 正确的注销
    def test_login_module(self):
        self.Login1('admin1', '123123')
        time.sleep(2)
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')

        try:
            dropdown_menu = WebDriverWait(self.driver, 10).until(
                EC.visibility_of_element_located((By.CLASS_NAME, 'el-dropdown'))
            )
            # 模拟鼠标悬停
            action = ActionChains(self.driver)
            action.move_to_element(dropdown_menu).perform()

            # 等待并点击退出登录按钮
            print("开始等待退出登录按钮出现...")
            logout_button = WebDriverWait(self.driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, '//li[contains(.,"退出登录")]'))
            )
            print("退出登录按钮已找到,即将点击取消...")
            self.click_and_verify_logout_dialog(logout_button, "注销登录吗?")

            # 再次点击退出登录并确认
            # 1、模拟鼠标悬停
            action = ActionChains(self.driver)
            action.move_to_element(dropdown_menu).perform()
            time.sleep(1)
            # 2、再次等待并点击退出登录按钮
            print("开始等待退出登录按钮出现...")
            logout_button = WebDriverWait(self.driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, '//li[contains(.,"退出登录")]'))
            )

            print("即将点击点击退出,弹窗内点击退出登录...")
            self.click_and_verify_logout_dialog(logout_button, "注销登录吗?", confirm=True)

        except (TimeoutException, NoSuchElementException) as e:

            print("操作异常:", e)

            print("当前页面源码:", self.driver.page_source)

    ##########主要的业务逻辑处理流程
    ####系统管理员

    #添加宿管
    def test_sys_adminAdd(self):
        self.Login1('admin1','123123')
        time.sleep(1)
        add = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[1]/div')
        add.click()
        time.sleep(1)

        addAdminPage = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/aside/ul/li[1]/ul/li[1]')
        addAdminPage.click()
        time.sleep(1)
        try:
            sysAdminId = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[1]/label')
            self.assertIsNotNone(sysAdminId,'用户名存在')

            # 填写宿管信息
            sysAdminId.click()
            time.sleep(2)
            input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')

            sysAdminId = input_elems[0]
            password = input_elems[1]
            name = input_elems[2]
            telephone=input_elems[3]
            gender = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[4]/div/div/label[1]/span[2]')

            # 不规范的填写
            sysAdminId.send_keys("")

            name.send_keys("")
            gender.click()
            for _ in range(2):
                sysAdminId.send_keys(Keys.ARROW_DOWN)
            sysAdminId.send_keys(Keys.ENTER)
            time.sleep(1)
            submit = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[6]/div/button[1]')
            submit.click()
            self.text_message("请确定输入非空")

            #正确的
            sysAdminId.clear()
            password.clear()
            telephone.clear()
            name.clear()
            text1="aaxx"
            sysAdminId.send_keys(text1)
            password.send_keys("123123")

            name.send_keys("水水水水水")
            gender.click()
            telephone.send_keys("19852352211")
            time.sleep(2)
            for _ in range(2):
                sysAdminId.send_keys(Keys.ARROW_DOWN)
            sysAdminId.send_keys(Keys.ENTER)

            time.sleep(2)
            submit = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[6]/div/button[1]')
            submit.click()

            time.sleep(2)
            expected_message=f"{text1}添加成功"
            # 验证弹窗
            self.verify_message(expected_message)
        except Exception as e:
            self.fail(f"验证添加宿管功能失败:{e}")
    #管理宿管
    def test_sys_adminManager(self):
        self.Login1('admin1','123123')
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')
        time.sleep(1)
        manager = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[1]/div')
        manager.click()
        time.sleep(1)

        managerAdminPage = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/aside/ul/li[1]/ul/li[2]')
        managerAdminPage.click()

        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')
        ziduan = input_elems[0]
        #宿管姓名
        for _ in range(2):
            ziduan.send_keys(Keys.ARROW_DOWN)
        ziduan.send_keys(Keys.ENTER)
        input_elems[1].send_keys("ll")


        button_search=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
        button_search.click()
        time.sleep(6)

    #添加学生
    def test_sys_studentAdd(self):
        self.Login1("admin1","123123")
        time.sleep(1)
        add = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[2]/div')
        add.click()
        time.sleep(1)

        addstuPage = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/aside/ul/li[2]/ul/li[1]')
        addstuPage.click()
        time.sleep(1)
        # 填写添加学生
        try:
            # 验证添加列表存在
            studentId = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[1]/label')
            self.assertIsNotNone(studentId,'学号存在')


            # 填写学生信息
            studentId.click()
            time.sleep(2)
            input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')

            # 获取填写的表单
            Id = input_elems[0]
            name = input_elems[1]
            gender = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[3]/div/div/label[2]/span[2]')
            # dormId = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[4]/div/div/div[1]/input')
            dormId=input_elems[2]

            # 不规范的填写
            Id.send_keys("")

            name.send_keys("")
            # self.text_message("请确认是否为空")

            gender.click()
            for _ in range(2):
                dormId.send_keys(Keys.ARROW_DOWN)
            dormId.send_keys(Keys.ENTER)
            time.sleep(1)

            submit = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[5]/div/button')
            time.sleep(2)
            submit.click()
            self.text_message("请确定输入非空")

            Id.clear()
            name.clear()
            # dormId.clear()
            # 正确填写信息
            Id.clear()
            name.clear()
            time.sleep(1)
            Id.send_keys("ccc")
            text1='nzz'
            name.send_keys(text1)
            gender.click()
            time.sleep(2)
            # 下拉框选择
            for _ in range(2):
                dormId.send_keys(Keys.ARROW_DOWN)
            dormId.send_keys(Keys.ENTER)
            time.sleep(2)
            # 提交
            submit = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[5]/div/button')
            submit.click()
            time.sleep(2)
            expected_message=f"{text1}添加成功"
            # 验证弹窗
            self.verify_message(expected_message)


        except Exception as e:
            self.fail(f"验证添加学生功能失败:{e}")
    #管理学生
    def test_sys_stuManager(self):
        self.Login1('admin1','123123')
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')
        time.sleep(1)
        manager = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[2]/div')
        manager.click()
        time.sleep(1)

        managerAdminPage = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/aside/ul/li[2]/ul/li[2]')
        managerAdminPage.click()

        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')
        ziduan = input_elems[0]
        #学号
        for _ in range(2):
            ziduan.send_keys(Keys.ARROW_DOWN)
        ziduan.send_keys(Keys.ENTER)
        input_elems[1].send_keys("001")


        button_search=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
        button_search.click()
        time.sleep(6)
    #学生迁出登记
    def test_sys_stuOutRegister(self):
        self.Login1('admin1','123123')
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')
        stuOutRegister=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/aside/ul/li[3]')
        stuOutRegister.click()
        time.sleep(1)
        try:
            input_elems = self.driver.find_elements(By.CLASS_NAME, 'el-input__inner')
            select_case=input_elems[0]
            ##查询
            #学号
            for _ in range(2):
                select_case.send_keys(Keys.ARROW_DOWN)
            select_case.send_keys(Keys.ENTER)
            select_value=input_elems[1]
            select_value.send_keys("001")
            time.sleep(1)
            search_button=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
            search_button.click()
            time.sleep(3)
            ##迁出
            move_button = self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/div[1]/div[3]/table/tbody/tr[1]/td[8]/div/button')
            move_button.click()
            time.sleep(1)
            message_text = self.driver.find_element(By.XPATH, "//div[@class='el-message-box__message']/p").text
            self.assertEqual("请输入迁出原因", message_text, f"弹窗信息不正确")
            input_because=self.driver.find_element(By.XPATH,'/html/body/div[3]/div/div[2]/div[2]/div[1]/input')
            input_because.send_keys('不想上学')
            confirm = self.driver.find_element(By.XPATH, "//button[contains(span, '确定')]")
            confirm.click()
            time.sleep(3)
            confirm = self.driver.find_element(By.XPATH, "//button[contains(span, '确定')]")
            confirm.click()
            time.sleep(3)

        except Exception as e:
            self.fail(f"迁出学生操作失败:{e}")
    #学生迁出记录
    def test_sys_stuOutRecord(self):
        self.Login1('admin1','123123')
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')
        time.sleep(1)
        manager = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[4]')
        manager.click()
        time.sleep(1)

        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')
        ziduan = input_elems[0]
        #学号
        for _ in range(2):
            ziduan.send_keys(Keys.ARROW_DOWN)
        ziduan.send_keys(Keys.ENTER)
        input_elems[1].send_keys("小明")

        button_search=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
        button_search.click()
        time.sleep(6)
    #学生缺寝记录
    def test_sys_absenceRecord(self):
        self.Login1('admin1','123123')
        self.verify_login_success('DORMS宿舍管理系统-系统管理员', '管理员1')
        time.sleep(1)
        absence = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[5]')
        absence.click()
        time.sleep(1)

        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')
        ziduan = input_elems[0]
        #楼宇
        for _ in range(2):
            ziduan.send_keys(Keys.ARROW_DOWN)
        ziduan.send_keys(Keys.ENTER)
        input_elems[1].send_keys("2号楼")


        button_search=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
        button_search.click()
        time.sleep(6)

    ####宿舍管理员
    ##学生缺寝登记
    def test_dor_absenceRegister(self):
        wait = WebDriverWait(self.driver, 10)
        self.Login2('ll','123123')
        self.verify_login_success('DORMS宿舍管理系统-宿舍管理员', '宋玉')
        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')

        for _ in range(2):
            input_elems[0].send_keys(Keys.ARROW_DOWN)
        input_elems[0].send_keys(Keys.ENTER)
        time.sleep(1)
        for _ in range(2):
            input_elems[1].send_keys(Keys.ARROW_DOWN)
        input_elems[1].send_keys(Keys.ENTER)
        time.sleep(1)
        for _ in range(2):
            input_elems[2].send_keys(Keys.ARROW_DOWN)
        input_elems[2].send_keys(Keys.ENTER)


        input_elems[3].send_keys("上学")
        for _ in range(2):
            input_elems[4].send_keys(Keys.ARROW_DOWN)
        input_elems[4].send_keys(Keys.ENTER)

        time.sleep(3)
        confirm=self.driver.find_element(By.TAG_NAME,"button")
        confirm.click()
        time.sleep(6)
        confirm_button=self.driver.find_element(By.XPATH,"/html/body/div[6]/div/div[3]/button")
        # confirm_button = WebDriverWait(self.driver, 5).until(
        #     EC.element_to_be_clickable((By.XPATH, "//button[contains(span, '确定')]"))
        # )
        confirm_button.click()
        self.verify_message('缺寝登记成功')
        # submit=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[6]/div/button')
        # submit.click()

        #不知道为什么报错
        # confirm_button = WebDriverWait(self.driver, 5).until(
        #     EC.element_to_be_clickable((By.XPATH, "//button[contains(span, '确定')]"))
        # )
        # confirm_button.click()
        # self.verify_message('缺寝登记成功')
    ##学生缺寝登记
    def test_dor_absenceRecord(self):
        self.Login2('ll','123123')
        self.verify_login_success('DORMS宿舍管理系统-宿舍管理员', '宋玉')
        time.sleep(1)
        absence = self.driver.find_element(By.XPATH, '//*[@id="app"]/section/section/aside/ul/li[2]')
        absence.click()
        time.sleep(1)

        input_elems = self.driver.find_elements(By.CLASS_NAME,'el-input__inner')
        ziduan = input_elems[0]
        #楼宇
        for _ in range(2):
            ziduan.send_keys(Keys.ARROW_DOWN)
        ziduan.send_keys(Keys.ENTER)
        input_elems[1].send_keys("2号楼")


        button_search=self.driver.find_element(By.XPATH,'//*[@id="app"]/section/section/section/main/div[2]/form/div[2]/div/div/button')
        button_search.click()
        time.sleep(6)
if __name__ == "__main__":
    unittest.main()
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值