当前位置: 首页 > 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.zskr.cn/news/1452522.html

相关文章:

  • GC 三色标记法的“并发安全性“误区,我也是踩了坑才明白
  • Mac Mouse Fix:如何让10美元鼠标在Mac上比触控板更好用
  • 物流AI集成失败率高达63%?揭秘头部企业私有化部署中未公开的4层协议对齐模型(含TMS/WMS/OMS三系统握手协议详解)
  • Java后台静默调用扫描仪的完整可运行工程(含jtwain.dll源码与Eclipse项目)
  • 别再只记事务代码了!深入理解SAP EWM三种盘点模式(定期/连续/周期)的配置逻辑与业务场景选择
  • Kinect麦克风阵列开发实战:从硬件解析到稳定部署
  • 利用快马平台快速构建dhnvr416h-hd高清视频处理应用原型
  • 如何用智慧树自动刷课插件高效完成网课学习:3步实现解放双手
  • 浙江国际物流服务选型指南 适配外贸全场景需求 - 奔跑123
  • 保姆级教程:用ENVI 5.6.1搞定高分二号(GF2)影像融合,从插件安装到出图避坑全流程
  • 保姆级教程:在银河麒麟V10服务器上配置bond双网卡(附7种模式详解与选型建议)
  • WPF大屏看板源码工程:含完整目录结构、双素材包与调试配置
  • 微软Project Silica:用石英玻璃实现千年数据存储的技术解析
  • 告别Keil!用CLion无缝接手同事的STM32项目(附CubeMX迁移文件清单)
  • 新手必看:用逻辑分析仪抓取杰发AC7840的CAN总线波形,一步步教你分析数据帧
  • 实战指南:基于快马平台,快速开发一个电商智能客服AI Agent
  • 开放软件设计:从互操作性到科学工作流构建的实践指南
  • 城市数字文化空间建设平台技术方案
  • STM32L431电池供电场景下的双路低功耗唤醒工程:RTC定时+按键即时响应
  • Claude项目计划书黄金结构:1份模板+6个数据锚点+12项必须签署的法律附件(限2024Q3内部流出版)
  • MPC-BE深度解析:Windows平台开源媒体播放器的架构设计与工程实践
  • 保姆级教程:用Pandas+Matplotlib搞定公交刷卡数据分析(从数据清洗到可视化)
  • 混合办公、提示工程与智能IDE:提升开发者生产力的三大前沿实践
  • 破解磁珠丢失瓶颈: 云克隆多因子检测试剂盒的高效解决方案及优势
  • 深入解析qBittorrent search-plugins:打造专业级种子搜索生态
  • 工地上班考勤打卡软件怎么选?通芝十年专研给出避坑指南
  • ESP-Bluedroid这个在C5上能不能用Psram内存
  • 从工地到代码:安全帽检测数据集VOC格式详解与LabelMe标注实战
  • 手机号码定位系统:3步实现精准位置查询与地图可视化
  • 国内头部海参供应商实力排行 品质与服务双维度解析 - 真知灼见33