蓝桥杯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() passfrom 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() passfrom 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() passimport 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()