当前位置: 首页 > news >正文

蓝桥杯17届软件测试预选赛4期Python版 自动化测试

python 用到的知识面:selenium,assert断言

from selenium.webdriver.common.by import By """ 添加部门页面类,需实现该页面中如下 7 个方法的操作代码: 1. 获取登录后的【蓝桥超管】文本值的方法 2. 点击【系统管理】 菜单的方法 3. 点击【部门管理】 菜单的方法 4. 点击【新增】按钮的方法 5. 定位【部门名称】表单文本框,通过参数deptName输入修改信息的方法 6. 定位【显示排序】表单文本框,通过参数orderNum输入修改信息的方法 7. 点击【确定】按钮的方法 * 注意:不要改动已定义的方法名。 * 注意:不得在本类中编写断言、选项卡切换、iframe切换等业务流程代码!!! * 提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!! """ from cgitb import text from selenium.webdriver.common.devtools.v129.fed_cm import click_dialog_button class AddDeptPage: def __init__(self, driver): self.driver = driver # 获取登录后的【蓝桥超管】文本值的方法 def get_username_text(self): # TODO 请实现获取【蓝桥超管】的操作,注意需要有返回值。 username_elem = self.driver.find_element(By.XPATH, "//*[contains(text(), '蓝桥超管')]") return username_elem.text pass # 点击【系统管理】 菜单的方法 def click_system_management_menu(self): # TODO 请实现点击【系统管理】菜单操作 system_manage_elem = self.driver.find_element(By.XPATH, "//*[text()='系统管理']") system_manage_elem.click() pass # 点击【部门管理】 菜单的方法 def click_dept_management_menu(self): # TODO 请实现点击【部门管理】 菜单操作 dept_manage_elem = self.driver.find_element(By.XPATH, "//*[text()='部门管理']") dept_manage_elem.click() pass # 点击【新增】按钮的方法 def click_add_button(self): # TODO 请实现点击【新增】 按钮 add_btn_ele = self.driver.find_element(By.XPATH, '/html/body/div/div/div[2]/div/div[1]/div[1]/a[1]') add_btn_ele.click() pass # 定位【部门名称】表单文本框,通过参数deptName输入修改信息的方法 def input_dept_name(self, dept_name): # TODO 请实现定位表单框以及填充信息的操作 dept_name_ele=self.driver.find_element(By.XPATH, '//*[@id="deptName"]') dept_name_ele.clear() dept_name_ele.send_keys(dept_name) pass # 定位【显示排序】表单文本框,通过参数orderNum输入修改信息的方法 def input_order_num(self, order_num): order_num_ele = self.driver.find_element(By.NAME, "orderNum") order_num_ele.clear() order_num_ele.send_keys(order_num) # TODO 请实现定位表单框以及填充信息的操作 pass # 点击【确定】按钮的方法 def click_ok_button(self): # TODO 请实现点击【确定】按钮操作 click_OK_btn=self.driver.find_element(By.XPATH,'//div[contains(@class,"layui-layer-btn")]/a[text()="确定"]') click_OK_btn.click() pass
from selenium.webdriver.common.by import By """ 部门管理页面类,需实现该页面中如下 8 个方法的操作代码: 1. 定位搜索项中的【部门名称】输入框的方法,通过参数deptName输入信息的方法 2. 点击【搜索】按钮的方法 3. 获取搜索结果的方法,搜索【排序】值为 “106” 4. 搜索列表中点击选中【部门名称】为 “教研部门” 的单选框的方法 5. 点击【修改】按钮的方法 6. 获取修改后的返回结果的方法,【部门名称】值为 “教研教学部门” 7. 点击搜索列表【删除】按钮的方法 8. 点击【确认】删除的按钮的方法 * 注意:不要改动已定义的方法名。 * 注意:不得在本类中编写断言、选项卡切换、iframe切换等业务流程代码!!! * 提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!! """ class DeptManagementPage: def __init__(self, driver): self.driver = driver # 定位搜索项中的【部门名称】输入框的方法,通过参数deptName输入信息的方法 def input_dept_name_search(self, dept_name): # TODO 请实现定位表单文本框以及填充信息的操作 dept_name_search_input=self.driver.find_element(By.NAME,"deptName") dept_name_search_input.clear() dept_name_search_input.send_keys(dept_name) pass # 点击【搜索】按钮的方法 def click_search_button(self): # TODO 请实现点击【搜索】按钮操作 button_click_search=self.driver.find_element(By.XPATH,'//*[@id="dept-form"]/div/ul/li[3]/a[1]') button_click_search.click() pass # 获取搜索结果的方法,搜索【排序】值为 “106” def get_order_num_text(self): # TODO 请实现获取部门排序号的操作,注意需要有返回值。 order_num_elem = self.driver.find_element(By.XPATH,'//td[@name="orderNum" and text()="106"]') return order_num_elem.text pass # 搜索列表中点击选中【部门名称】为 “教研部门” 的单选框的方法 def click_dept_name_radio(self): # TODO 请实现点击【部门名称】对应的单选框操作 a = self.driver.find_element(By.XPATH, '//td[@name="deptName" and @title="教研部门"]/parent::tr//input[@name="select_item"][@type="radio"]') a.click() pass # 点击【修改】按钮的方法 def click_modify_button(self): # TODO 请实现点击【修改】按钮操作 b=self.driver.find_element(By.XPATH,'/html/body/div/div/div[2]/div/div[1]/div[1]/a[2]') b.click() pass # 获取修改后的返回结果的方法,【部门名称】值为 “教研教学部门” def get_dept_name_text(self): # TODO 请实现获取修改后的结果操作,注意需要有返回值。 dept_name_test=self.driver.find_element(By.XPATH, '//td[@name="deptName" and text()="教研教学部门"]') return dept_name_test.text pass # 点击搜索列表【删除】按钮的方法 def click_delete_button(self): # TODO 请实现点击【删除】按钮操作 a=self.driver.find_element(By.XPATH,'//td[@name="deptName" and text()="教研教学部门"]/parent::tr//a[contains(@class, "btn-danger") and contains(text(), "删除")]') a.click() pass # 点击【确认】删除的按钮的方法 def click_ok_button(self): # TODO 请实现点击【确认】删除按钮操作 click_OK_btn=self.driver.find_element(By.XPATH,"//div[starts-with(@id, 'layui-layer')]//a[contains(text(), '确认')]") click_OK_btn.click() pass
from selenium.webdriver.common.by import By """ 修改部门页面类,需实现该页面中如下 5 个方法的操作代码: 1. 定位【部门名称】表单文本框,通过参数deptName输入修改信息的方法 2. 定位【负责人】表单文本框,通过参数leader输入修改信息的方法 3. 定位【联系电话】表单文本框,通过参数phone输入修改信息的方法 4. 定位【邮箱】表单文本框,通过参数email输入修改信息的方法 5. 点击【确定】按钮的方法 * 注意:不要改动已定义的方法名。 * 注意:不得在本类中编写断言、选项卡切换、iframe切换等业务流程代码!!! * 提醒:提交答案前,请确认是否存在多余的导包动作,如存在,请删除!!! """ class ModifyDeptPage: def __init__(self, driver): self.driver = driver # 定位【部门名称】表单文本框,通过参数deptName输入修改信息的方法 def input_dept_name(self, dept_name): # TODO 请实现定位表单文本框以及填充信息的操作 a=self.driver.find_element(By.XPATH,'//*[@id="deptName"]') a.clear() a.send_keys(dept_name) pass # 定位【负责人】表单文本框,通过参数leader输入修改信息的方法 def input_leader(self, leader): # TODO 请实现定位表单文本框以及填充信息的操作 b=self.driver.find_element(By.XPATH,'//*[@id="leader"]') b.clear() b.send_keys(leader) pass # 定位【联系电话】表单文本框,通过参数phone输入修改信息的方法 def input_phone(self, phone): # TODO 请实现定位表单文本框以及填充信息的操作 b=self.driver.find_element(By.XPATH,'//*[@id="phone"]') b.clear() b.send_keys(phone) pass # 定位【邮箱】表单文本框,通过参数email输入修改信息的方法 def input_email(self, email): # TODO 请实现定位表单文本框以及填充信息的操作 b=self.driver.find_element(By.XPATH,'//*[@id="email"]') b.clear() b.send_keys(email) pass # 点击【确定】按钮的方法 def click_ok_button(self): # TODO 请实现点击【确定】按钮操作 click_OK_btn=self.driver.find_element(By.XPATH,'//div[contains(@class,"layui-layer-btn")]/a[text()="确定"]') click_OK_btn.click() pass
import os import unittest from selenium import webdriver from selenium.webdriver.firefox.service import Service from time import sleep from cn.lanqiao.web.login_page import LoginPage from cn.lanqiao.web.add_dept_page import AddDeptPage from cn.lanqiao.web.modify_dept_page import ModifyDeptPage from cn.lanqiao.web.dept_management_page import DeptManagementPage from selenium.webdriver.common import by from selenium.webdriver.common.by import By """ 测试用例类,请按照操作步骤编写测试用例,要求如下: 1. 合理使用元素的8种定位方式 2. 合理使用窗口切换方式 3. 合理使用元素等待时间 4. 请调用 Page 类中的方法实现操作步骤 5. 合理使用 iframe 切换,iframe 切换的代码填写在此文件中 6. 不要改动已经写好的方法名。 注意:确保当前文件和所有的 Page 文件都处于 PythonLanqiaoTest\\test\\cn\\lanqiao\\web 目录下 """ class WebCaseTest(unittest.TestCase): # 浏览器初始化 def setUp(self): cwd = os.getcwd() # 设置火狐驱动的路径,该路径不要随意改动,此处非考点 gecko_path = cwd[:cwd.find("PythonLanqiaoTest")+17]+"\driver\geckodriver.exe" options = webdriver.FirefoxOptions() # 允许跨域访问,此处非考点 options.set_preference('security.fileuri.strict_origin_policy', False) options.set_preference('security.fileuri.origin_policy', '*') self.driver = webdriver.Firefox(service=Service(gecko_path), options=options) # 设置隐式等待 5 秒,此处非考点 self.driver.implicitly_wait(5) # 浏览器窗口最大化 self.driver.maximize_window() # 填写被测站点地址 ,此处非考点 self.driver.get('http://localhost:8090/') # 请再此方法中续写测试用例代码 def test_browser(self): # 创建LoginPage对象,供调用该类中的方法实现【登录】的操作代码,此处非考点 login_page = LoginPage(self.driver) # 点击登录账号输入框并输入账户-admin login_page.input_login_name("admin") # 点击登录密码输入框并输入密码-admin123 login_page.input_login_password("admin123") # 点击登录按钮 login_page.click_login_button() # 创建AddDeptPage对象,此处非考点 add_dept_page = AddDeptPage(self.driver) # 创建DeptManagementPage对象,此处非考点 dept_management_page = DeptManagementPage(self.driver) # 创建ModifyDeptPage对象,此处非考点 modify_dept_page = ModifyDeptPage(self.driver) # TODO 请参照题目中【用例步骤】补全以下代码,调用剩余 3 个Page类中的方法实现。 username_text = add_dept_page.get_username_text() self.assertEqual(username_text, "蓝桥超管", "登录后显示的用户名不符合预期!") # ② 点击【系统管理】菜单 add_dept_page.click_system_management_menu() sleep(1) # 可选:加短暂等待,避免菜单加载不及时 # ③ 点击【部门管理】菜单 add_dept_page.click_dept_management_menu() sleep(1) # ④ 切换iframe(关键:部门管理页面通常嵌在iframe中,需先切换) iframe_ele = self.driver.find_element(By.NAME,'iframe5') self.driver.switch_to.frame(iframe_ele) # __________分界———————————————————— # ⑤ 点击【新增】按钮,进入新增部门界面 add_dept_page.click_add_button() # # sleep(50) #返回上一页 self.driver.switch_to.default_content() iframe_g = self.driver.find_element(By.XPATH, '//iframe[starts-with(@name,"layui-layer-iframe")]') self.driver.switch_to.frame(iframe_g) add_dept_page.input_dept_name("教研部门") # add_dept_page.input_order_num("106") self.driver.switch_to.default_content() # add_dept_page.click_ok_button() # self.driver.switch_to.frame(iframe_ele) # # ———————————————————————————————— #部门名称 dept_management_page.input_dept_name_search("研") dept_management_page.click_search_button() order_num = dept_management_page.get_order_num_text() self.assertEqual(order_num, "106", f"排序值断言失败,实际值:{order_num},期望值:106") dept_management_page.click_dept_name_radio() dept_management_page.click_modify_button() self.driver.switch_to.default_content() iframe_a = self.driver.find_element(By.XPATH, '//iframe[starts-with(@name,"layui-layer-iframe")]') self.driver.switch_to.frame(iframe_a) #输入修改里面的内容 modify_dept_page.input_dept_name("教研教学部门") modify_dept_page.input_leader("张三") modify_dept_page.input_phone("13165478901") modify_dept_page.input_email("yanxue@lanqiao.cn") self.driver.switch_to.default_content() modify_dept_page.click_ok_button() self.driver.switch_to.frame(iframe_ele) # 断言 dept_name=dept_management_page.get_dept_name_text() self.assertEqual(dept_name, "教研教学部门", f"排序值断言失败,实际值:{dept_name},期望值:教研教学部门") #删除 dept_management_page.click_delete_button() #转最初页面 self.driver.switch_to.default_content() #删除确定 dept_management_page.click_ok_button() # 浏览器退出 def tearDown(self): if self.driver: self.driver.quit() if __name__ == "__main__": unittest.main()
http://www.jsqmd.com/news/941091/

相关文章:

  • SAP CDS视图实战:用SEGW和/IWFND/MAINT_SERVICE快速发布只读OData服务(附自动同步CDS变更技巧)
  • GC 三色标记法的“并发安全性“误区,我也是踩了坑才明白
  • Mac Mouse Fix:如何让10美元鼠标在Mac上比触控板更好用
  • 北京黄金回收实力排行2026新鲜出炉!全城TOP精选商户综合实力评选 - 奢侈品回收测评
  • 从靶场到实战:用Pikachu靶场复现真实Web漏洞的5个关键步骤
  • 告别破解风险!手把手教你用Docker部署开源漏洞扫描工具替代AppScan
  • 【AI产品经理】传统产品经理 VS AI产品经理谁更好?
  • 物流AI集成失败率高达63%?揭秘头部企业私有化部署中未公开的4层协议对齐模型(含TMS/WMS/OMS三系统握手协议详解)
  • TMSpeech:Windows本地实时语音转文字,让你的会议记录效率提升300%
  • Java后台静默调用扫描仪的完整可运行工程(含jtwain.dll源码与Eclipse项目)
  • CefFlashBrowser:拯救Flash时代数字遗产的专业浏览器
  • Mermaid Live Editor深度解析:基于SvelteKit的实时可视化架构设计实践
  • 别再只记事务代码了!深入理解SAP EWM三种盘点模式(定期/连续/周期)的配置逻辑与业务场景选择
  • 2026年最新安康市黄金回收铂金回收白银回收彩金回收解析:口碑排行前五门店筛选及避坑要点和联系方式推荐 - 亦辰小黄鸭
  • 阴阳师自动化脚本终极指南:一键托管20+日常任务,解放双手的智能游戏管家
  • 2026 深度测评|全网视频去水印工具实测,主流方法 + 适配场景全盘点
  • Kinect麦克风阵列开发实战:从硬件解析到稳定部署
  • 手把手教你搞定Xilinx CPRI IP核的时钟同步(附Slave端Cleanup PLL配置避坑指南)
  • 利用快马平台快速构建dhnvr416h-hd高清视频处理应用原型
  • 如何用智慧树自动刷课插件高效完成网课学习:3步实现解放双手
  • 如何高效解锁网易云音乐NCM格式?智能解密工具一站式解决方案
  • 青岛AI营销获客公司怎么选?2026青岛AI优化推广、GEO推广公司TOP3深度测评
  • AI + Map 文件:高质量还原 Vite 打包源码实战
  • 从‘扫出漏洞’到‘看懂报告’:AppScan实战结果深度解读与修复指南(以XX漏洞为例)
  • 微软亚洲研究院博士生论坛深度解析:前沿趋势与青年学者成长策略
  • PCB核心知识总结
  • 73-Java ListIterator 接口
  • 保姆级教程:用ENVI 5.6.1搞定高分二号(GF2)影像融合,从插件安装到出图避坑全流程
  • 高翔博士slambook2 ch9 编译运行笔记
  • 浙江国际物流服务选型指南 适配外贸全场景需求 - 奔跑123