模拟赛 2 期 自动化测试python——第十五届蓝桥杯(软件测试)

模拟赛 1 期 自动化测试python——第十五届蓝桥杯(软件测试)链接

题目链接

第十五届蓝桥杯(软件测试)模拟赛 2 期题目 - 自动化测试题目介绍(Python 语言)(50分) - 蓝桥云课 (lanqiao.cn)

题目信息:

请使用 Python 编程语言,结合 PO 模式(Page Object Model 的简写 页面对象模型 )思想 ,使用 Selenium 自动化测试工具补全如下多个 Python 类文件中 //TODO 处缺失的代码:

  • Page1:login_page.py ,“登录”页面(已经写好,无需填写)

  • Page2:post_management_page.py,“岗位管理” 页面

  • Page3:add_post_page.py,“添加岗位” 页面

  • web_case_test.py:测试用例代码文件

请按照用例步骤,在测试用例 web_case_test.py 文件中需通过调用 3 个 Page 类中的方法完成自动化测试代码。

具体题目部署看题目要求,为节省学习时间直接代码开始

知识点(先看这里):

超级重要!!!!!!!!要点:    观察元素在iframe里面还是外面!!!!!!!!

frame 切换处理

        切入.switch_to.frame(frame_reference)​​​​​​

        frame_reference 可以是 frame 元素的属性 name 或者 id 的属性值(默认定位方式)。另外         一种情况,如果没有属性 name 或者 id,可以先定位到 frame 元素,再进行切换。

        切出

        .switch_to.default_content()返回主文档
        .switch_to.parent_frame()返回父文档

文本信息:.text 注意:text 后面不要加括号

清空:clear() ,确保输入没有脏数据,

输入:.send_keys("输入的内容")

第 1 步:输入被测系统网址,请查看部署成功的被测系统网址(注意不要忘记在代码中输入网址)。

第 2 步:在【登录】页面 login_page.py 中依次进行如下操作:

  • ①输入【用户名】方法

  • ②输入【密码】方法

  • ③输入【验证码】方法

  • ④点击【登录】按钮的方法

       # 创建LoginPage对象,供调用该类中的方法实现【登录】的操作代码
        login_page = LoginPage(self.driver)

        # 点击登录账号输入框并输入账户-admin
        login_page.input_login_name("admin")

        # 点击登录密码输入框并输入密码-LQ15Mock2@2004
        login_page.input_login_password("admin123")

        # 点击验证码输入框并输入-666
        login_page.input_code("666")

        # 点击登录按钮
        login_page.click_login_button()
        sleep(2)

第 3 步:登录成功后,在 【岗位管理】页面 post_management_page.py 中依次完成以下操作代码:

  • ①获取登录后的【蓝桥超管】插入断言

  • ②点击【系统管理】菜单

  • ③点击【岗位管理】菜单

  • ④搜索项【岗位编码】输入“ceo”,请注意此处 iframe 的切换

  • ⑤点击【搜索】按钮

  • ⑥获取搜索后的【分页数据】插入断言

  • ⑦在搜索结果列表,点击数据后的【删除】按钮,注意 iframe 的切换。

post_management_page.py的完善

from selenium.webdriver.common.by import By

"""

 * Page2-【岗位管理页面】
  * 需实现该页面中如下 7 个方法的操作代码(以下元素位置可参照题目附图)
  *  
 * 1.获取登录后的【蓝桥超管】文本值
 * 2.点击【系统管理】 > 点击【岗位管理】 的菜单路径
 * 3.定位搜索项中的【岗位编码】输入框 ,并输入参数post_code
 * 4.点击【搜索】按钮方法
 * 5.获取搜索结果的【分页显示信息文本值】
 * 6.点击搜索列表【删除】按钮
 * 7.点击【确认】删除的按钮
 
 *  注意1:不要在  Page 页的方法中填写  iframe 的切换代码。
 *  注意2:注意不要改动已经写好的方法名。
 
"""
from lib2to3.tests.support import driver
import time
class PostManagementPage:
    
    def __init__(self, driver):
        self.driver = driver

    def get_username_text(self):
        # TODO 请实现 获取【蓝桥超管】文本值,注意在此方法中添加返回值
        return self.driver.find_element(By.CSS_SELECTOR, 'span[class="hidden-xs"]').text
    
    def click_post_manage_path(self):
        # TODO 请依次实现点击【系统管理】 > 点击【岗位管理】 的路径方法
        self.driver.find_element(By.XPATH, '//a/span[text()="系统管理"]').click()
        self.driver.find_element(By.PARTIAL_LINK_TEXT, '岗位管理').click()

    
    def input_post_code_search(self, post_code):
        # TODO 请实现搜索条件【岗位编码】输入框的方法,post_code 为输入参数
          self.driver.find_element(By.CSS_SELECTOR, 'input[name="postCode"]').clear()
          self.driver.find_element(By.CSS_SELECTOR, 'input[name="postCode"]').click()
          self.driver.find_element(By.CSS_SELECTOR, 'input[name="postCode"]').send_keys(post_code)
      
        
        
    
    def click_search_button(self):
        # TODO 请实现点击【搜索】按钮的方法
         self.driver.find_element(By.CSS_SELECTOR, '.fa-search').click()
        
        
    def get_page_numberText(self):
        # TODO 请实现 获取【分页显示信息文本值】的操作方法,注意在此方法中添加返回值
         return self.driver.find_element(By.CSS_SELECTOR, '.pagination-info').text

        

    def click_delete_button(self):
        # TODO 请实现点击【删除】按钮的方法
        self.driver.find_element(By.XPATH, '//td[text()="ceo"]/../td/a[text()="删除"]').click()
        time.sleep(1)
        
        
    def click_ok_button(self):
        # TODO 请实现点击【确认】删除的按钮的方法    
        self.driver.find_element(By.PARTIAL_LINK_TEXT,'确认').click()
        
        
        

post_management_page.py  的  test_web_case.py的完善

         #  创建PostManagementPage对象
        post_management_page = PostManagementPage(self.driver)
        
       
        
        self.a = post_management_page.get_username_text()
        
        self.assertEqual("蓝桥超管",self.a, "没获取到蓝桥超管")
        
        
        post_management_page.click_post_manage_path()
        
        self.driver.switch_to.frame("iframe6")
        
        post_management_page.input_post_code_search("ceo")
        sleep(2)
        post_management_page.click_search_button()
        self.b = post_management_page.get_page_numberText()
        
        self.assertEqual("显示第 1 到第 1 条记录,总共 1 条记录",self.b, "没获取分页信息")
        
        post_management_page.click_delete_button()
        
        self.driver.switch_to.parent_frame()
        post_management_page.click_ok_button()

add_post_page.py完善

from selenium.webdriver.common.by import By
 
"""
 
 * Page3-【管理页面】
  * 需实现该页面中如下 5 个方法的操作代码
  *  
 * 1.点击【+新增】元素操作方法
 * 2.表单框输入【岗位名称】的方法
 * 3.表单框输入【岗位编码】的方法
 * 4.表单框输入【显示顺序】的方法
 * 5.点击【确定】按钮的方法
 *
 * 注意1:不要在  Page 页的方法中填写 iframe 的切换代码。
 * 注意2:注意不要改动已经写好的方法名。
 * 
 *
  
"""
class AddPostPage:
     
    def __init__(self, driver):
        self.driver = driver
 
     
    def click_add_button(self):
        # TODO 请实现点击【+新增】元素操作方法
        self.driver.find_element(By.LINK_TEXT,'新增').click()
         
        
 
    def input_post_name(self, post_name):
        # TODO 请实现表单框输入【岗位名称】的方法
        self.driver.find_element(By.ID,'postName').send_keys(post_name)
 
         
     
    def input_post_code(self, post_code):
        # TODO 请实现表单框输入【岗位编码】的方法
         self.driver.find_element(By.ID,'postCode').send_keys(post_code)

 
     
    def input_post_sort(self, post_sort):
        # TODO 请实现表单框输入【显示顺序】的方法
         self.driver.find_element(By.ID,'postSort').send_keys(post_sort)

 
     
    def click_ok_button(self):
        #TODO 请实现点击【确定】按钮的方法
         self.driver.find_element(By.PARTIAL_LINK_TEXT,'确定').click()

 
         

add_post_page.py 的  test_web_case.py的完善

          # 创建PostManagementPage对象
        add_post_page = AddPostPage(self.driver)
        
        self.driver.switch_to.frame("iframe6")
        add_post_page.click_add_button()
        
        self.driver.switch_to.parent_frame()
        
        self.iframe = self.driver.find_element(By.XPATH, '//iframe[@src="/system/post/add"]')
        self.driver.switch_to.frame(self.iframe)
        
        add_post_page.input_post_name("董事长")
        add_post_page.input_post_code("ceo")
        add_post_page.input_post_sort("1")
        
        self.driver.switch_to.parent_frame()

        add_post_page.click_ok_button()
        

这里比较绕

注意看

1.确保现在位置处于主文档,不行你就.switch_to.default_content()

为方便粘贴test_web_case.py这里放完整版的

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.post_management_page import PostManagementPage
from cn.lanqiao.web.add_post_page import AddPostPage
from selenium.webdriver.common.by import By

"""
 * 请按照操作步骤编写测试用例
 *
 * 用例要求:
 * 1.合理使用元素等待时间。
 * 2.请调用 Page 类中的方法实现操作步骤。
 * 3.合理使用 iframe 切换,iframe 切换的代码填写在此文件中。
 * 4.不要改动已经写好的方法名。
 *

"""

class WebCaseTest(unittest.TestCase):
    
    # 浏览器初始化
    def setUp(self):
        # 设置火狐驱动的路径,该路径不要随意改动
        gecko_path = "C:\\LanQiaoTest\\project\\PythonLanqiaoTest\\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("https://6614b0eabcadade077bea615.hz-iframe-svc.simplelab.cn/login")
#         self.driver.find_element(by, value).send_keys()
        

    # 请再此方法中续写测试用例代码
    def test_browser(self):
        # 创建LoginPage对象,供调用该类中的方法实现【登录】的操作代码
        login_page = LoginPage(self.driver)

        # 点击登录账号输入框并输入账户-admin
        login_page.input_login_name("admin")

        # 点击登录密码输入框并输入密码-LQ15Mock2@2004
        login_page.input_login_password("admin123")

        # 点击验证码输入框并输入-666
        login_page.input_code("666")

        # 点击登录按钮
        login_page.click_login_button()
        sleep(2)
        
        
        
        
        #  创建PostManagementPage对象
        post_management_page = PostManagementPage(self.driver)
        
       
        
        self.a = post_management_page.get_username_text()
        
        self.assertEqual("蓝桥超管",self.a, "没获取到蓝桥超管")
        
        post_management_page.click_post_manage_path()
        
        self.driver.switch_to.frame("iframe6")
        
        post_management_page.input_post_code_search("ceo")
        sleep(2)
        post_management_page.click_search_button()
        self.b = post_management_page.get_page_numberText()
        
        self.assertEqual("显示第 1 到第 1 条记录,总共 1 条记录",self.b, "没获取分页信息")
        
        post_management_page.click_delete_button()
        
        self.driver.switch_to.parent_frame()
        
        
        post_management_page.click_ok_button()
        
        
        
        # 创建PostManagementPage对象
        add_post_page = AddPostPage(self.driver)
        
        self.driver.switch_to.frame("iframe6")
        
        add_post_page.click_add_button()
        
        self.driver.switch_to.parent_frame()
        
        self.iframe = self.driver.find_element(By.XPATH, '//iframe[@src="/system/post/add"]')
        self.driver.switch_to.frame(self.iframe)
        
        add_post_page.input_post_name("董事长")
        add_post_page.input_post_code("ceo")
        add_post_page.input_post_sort("1")
        
        self.driver.switch_to.parent_frame()

        add_post_page.click_ok_button()
        
        
   
        #TODO 请参照题目中【用例步骤】补全以下代码,调用 3 个Page类中的方法实现。
    
        
    # 浏览器退出
    def tearDown(self):
        if self.driver:
            self.driver.quit()

if __name__ == "__main__":
    unittest.main()  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜617

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值