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

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

题目链接

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

题目信息:

请使用 Python 编程语言,结合 PO 模式(Page Object Model 的简写 页面对象模型 )思想 ,使用 Selenium 自动化测试工具补全如下 4 个 Java 类文件中 # TODO 处缺失的代码(只填写TODO部分缺失的代码,其他内容勿改):

  • login_page.py:“用户登录” 页面。

  • add_user_page.py:“新增用户” 页面。

  • user_manage_page.py:“用户管理” 页面。

  • test_web_case.py:测试用例。

    请按照用例步骤,在测试用例 test_web_case.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.iframe 的切换  (每个这里切换题目都有提示,发现定位不到就检查一下这里)

    2.

    报错现象如图,文字存在空格,所以也不容易看出来

    解决方法: 看图

    错误的演示:   不要学!!!!         不要学!!!!        不要学!!!!         不要学!!!!

    关于这道比较绕,所以就直接跟系统步骤来做比较方便

    第 1 步:输入被测系统网址,请查看部署成功的被测系统网址。

    网址是变化的别跟着复制了

    self.driver.get("https://66156b17172d5d50d821fb5b.hz-iframe-svc.simplelab.cn/login")
    

    第 2 步:在登录页面依次①输入【用户名】-->②输入【密码】-->③点击【登录】按钮进行登录,如下图所示。

    login_page.py的补充

    from selenium.webdriver.common.by import By
    """
     * Page1-【登录】页面
     * 
     * 实现该页面中如下 3 个元素的操作代码(以下元素位置可参照题目附图)。
     * 
     * 1. 输入【登录名称】
     * 2. 输入【登录密码】
     * 3. 点击【登录】按钮
     
     * 注意1:不要在 Page 类中填写 iframe 切换的代码。
     * 注意2:不要改动已经写好的方法名。
    """
    class LoginPage:
        def __init__(self, driver):
            self.driver = driver
        
        def input_login_name(self, loginName):
            # TODO 实现 【登录名称】输入的方法
            self.driver.find_element(By.CSS_SELECTOR,'input[name="username"]').clear()
            self.driver.find_element(By.CSS_SELECTOR,'input[name="username"]').send_keys(loginName)
           
           
        
        def input_login_password(self, password):
            # TODO 实现【密码】输入的 方法
             self.driver.find_element(By.CSS_SELECTOR,'input[name="password"]').clear()
             self.driver.find_element(By.CSS_SELECTOR,'input[name="password"]').send_keys(password)
           
        
        def click_login_button(self):
            # TODO 实现 【登录】按钮的点击方法
             self.driver.find_element(By.ID,'btnSubmit').click() 

    第 3 步:插入断言,登录成功后,请对显示的用户名是否为【蓝桥超管】进行断言,如下图所示。

    user_manage_page.py 的补充

     user_manage_page = UserManagePage(self.driver)
            
            self.a = user_manage_page.get_username_text()
            self.assertEqual("蓝桥超管", self.a, "没找到蓝桥超管")

    第 4 步:依次①点击【系统管理】-->②点击【用户管理】-->③点击【新增用户】按钮,如下图所示。

    提示:注意此处 iframe 的切换。

    user_manage_page.py 的补充

     def click_system_menu(self):
            # TODO 请实现点击【系统管理】菜单的操作方法
            self.driver.find_element(By.XPATH, '//span[text()="系统管理"]').click()
         
        def click_user_menu(self):
            # TODO 请实现点击【用户管理】菜单的操作方法
             self.driver.find_element(By.PARTIAL_LINK_TEXT,'用户管理').click()
         
        def click_add_user_button(self):    
            # TODO 请实现点击【新增+】按钮的操作方法
            self.driver.find_element(By.XPATH, '//div[@id="toolbar"]/a[1]').click()

    第 5 步:新增用户页面,依次①输入【用户名称】-->②输入【登录账号】-->③输入【登录密码】-->④勾选【角色】(普通角色)-->⑤点击【保存】按钮,如下图所示。

    提示:注意此处 iframe 的切换。

    add_user_page.py的补充

     """
     * Page3-【新增用户】页面 
     * 需实现该页面中如下 5 个元素的操作代码,以下元素位置可参照题目附图:
     *
     * 1. 表单框输入【用户名】
     * 2. 表单框输入【登录账号】
     * 3. 表单框输入【密码】
     * 4. 单选框选择【普通用户】
     * 5. 点击【保存】按钮
      
     *  注意1:不要在 Page 类中填写 iframe 切换的代码。
     *  注意2:不要改动已经写好的方法名。
    """
    from selenium.webdriver.common.by import By
    class AddUserPage:
        def __init__(self, driver):
            self.driver = driver
     
         
         
        def input_user_name(self, userName):
            # TODO 实现 表单【用户名】点击和输入 的方法
            self.driver.find_element(By.ID,'userName').clear()
            self.driver.find_element(By.ID,'userName').send_keys(userName)
         
     
         
        def input_login_name(self, loginName):
            # TODO 实现 表单【登录账号】点击和输入 的方法
            self.driver.find_element(By.ID,'loginName').clear()
            self.driver.find_element(By.ID,'loginName').send_keys(loginName)
     
     
         
        def input_login_password(self, loginPassword):
            # TODO 实现 表单【密码】点击和输入 的方法
            self.driver.find_element(By.ID,'password').clear()
            self.driver.find_element(By.ID,'password').send_keys(loginPassword)
     
         
        def click_role(self):
            # TODO 实现 表单【普通用户】单选 的方法
            self.driver.find_element(By.XPATH,'//div[@]/label[2]').click()
     
         
        def click_save_button(self):
            # TODO 实现 表单【保存】按钮点击的方法
            self.driver.find_element(By.XPATH,'//button[@]/i').click() 

    第 6 步:插入断言,断言是否添加成功,通过下图中①处中文本内容和预期相匹配。

     self.b = user_manage_page.get_page_number_text()
            
            self.assertEqual("显示第 1 到第 3 条记录,总共 3 条记录", self.b, "没找到分页信息")

    第 7 步:如上图所示,在搜索框中输入刚才新添加的用户②【登录名称】,③点击【搜索】按钮。

     user_manage_page.input_login_name("luobo")
            user_manage_page.click_search_button()
            user_manage_page.delete_user()
            user_manage_page.click_reset_button()

    第 8 步:插入断言,断言搜索结果是否正确,通过上图中①处中文本内容和预期相匹配。

    这里的断言数据看你们自己实际的"显示第 1 到第 3 条记录,总共 3 条记录"

     self.b = user_manage_page.get_page_number_text()
            
            self.assertEqual("显示第 1 到第 3 条记录,总共 3 条记录", self.b, "没找到分页信息") 

    第 9 步:在搜索结果的用户列表中,删除搜出出的该条信息,点击该条数据后面的④【删除】按钮,如上图所示。

     user_manage_page.input_login_name("luobo")
            user_manage_page.click_search_button()
            user_manage_page.delete_user()

    第 10 步:点击⑤【重置】对搜索条件进行清除,如上图所示。

     user_manage_page.click_reset_button()

    第 11 步:插入断言,断言搜索结果中①处中文本内容和预期相匹配。

    这里的断言数据看你们自己实际的"显示第 1 到第 2 条记录,总共 2 条记录"

     self.c = user_manage_page.get_page_number_text()
            self.assertEqual("显示第 1 到第 2 条记录,总共 2 条记录", self.c, "没找到分页信息2")

    第 12 步:点击【蓝桥超管】头像,点击【退出登录】,如下图所示。

    提示:注意此处 iframe 的切换。

     self.driver.switch_to.parent_frame()
            user_manage_page.click_login_out()
            time.sleep(2)

    login_page.py代码

    from selenium.webdriver.common.by import By
    """
     * Page1-【登录】页面
     * 
     * 实现该页面中如下 3 个元素的操作代码(以下元素位置可参照题目附图)。
     * 
     * 1. 输入【登录名称】
     * 2. 输入【登录密码】
     * 3. 点击【登录】按钮
     
     * 注意1:不要在 Page 类中填写 iframe 切换的代码。
     * 注意2:不要改动已经写好的方法名。
    """
    class LoginPage:
        def __init__(self, driver):
            self.driver = driver
        
        def input_login_name(self, loginName):
            # TODO 实现 【登录名称】输入的方法
            self.driver.find_element(By.CSS_SELECTOR,'input[name="username"]').clear()
            self.driver.find_element(By.CSS_SELECTOR,'input[name="username"]').send_keys(loginName)
           
           
        
        def input_login_password(self, password):
            # TODO 实现【密码】输入的 方法
             self.driver.find_element(By.CSS_SELECTOR,'input[name="password"]').clear()
             self.driver.find_element(By.CSS_SELECTOR,'input[name="password"]').send_keys(password)
           
        
        def click_login_button(self):
            # TODO 实现 【登录】按钮的点击方法
             self.driver.find_element(By.ID,'btnSubmit').click() 

    user_manage_page.py代码

    from selenium.webdriver.common.by import By
    from time import sleep
     
    """
     * page2-【用户管理 】页面
     * 
     * 需实现该页面中如下 10 个元素的操作代码,以下元素位置可参照题目附图:
     *
     * 1. 点击【系统管理】菜单
     * 2. 点击【用户管理】菜单
     * 3. 点击【新增+】按钮
     * 4. 输入【登录名称】搜索框
     * 5. 点击【搜索】按钮
     * 6. 点击【重置】按钮
     * 7. 点击【删除】按钮
     * 8. 获取【分页显示信息】文本
     * 9. 获取【登录成功后的用户名】文本
     * 10. 用户【用户退出】的操作方法
     
     * 注意1:不要在 Page 类中填写 iframe 切换的代码。
     * 注意2:不要改动已经写好的方法名。
     
    """
    class UserManagePage:
        def __init__(self, driver):
            self.driver = driver
     
        def click_system_menu(self):
            # TODO 请实现点击【系统管理】菜单的操作方法
            self.driver.find_element(By.XPATH, '//span[text()="系统管理"]').click()
         
        def click_user_menu(self):
            # TODO 请实现点击【用户管理】菜单的操作方法
             self.driver.find_element(By.PARTIAL_LINK_TEXT,'用户管理').click()
         
        def click_add_user_button(self):    
            # TODO 请实现点击【新增+】按钮的操作方法
            self.driver.find_element(By.XPATH, '//div[@id="toolbar"]/a[1]').click()
         
        def input_login_name(self, loginName):
            # TODO 请实现搜索框输入【登录名称】的操作方法
            self.driver.find_element(By.XPATH, '//input[@name="loginName"]').clear()
            self.driver.find_element(By.XPATH, '//input[@name="loginName"]').click()
            self.driver.find_element(By.XPATH, '//input[@name="loginName"]').send_keys(loginName)
         
        def click_search_button(self):
            # TODO 请实现点击【搜索】按钮的操作方法
            self.driver.find_element(By.XPATH, '//input[@name="loginName"]/../../li/a[1]').click()
         
        def click_reset_button(self):
            # TODO 请实现【重置】按钮的操作方法
            self.driver.find_element(By.XPATH, '//input[@name="loginName"]/../../li/a[2]').click()
     
         
        def delete_user(self):
            # TODO 请实现【删除】用户的操作方法
            self.driver.find_element(By.XPATH, '//table[@id="bootstrap-table"]/tbody/tr[1]/td/a[2]').click()
         
        def get_username_text(self):
            # TODO: 实现获取【登录成功后的用户名文本】的操作方法 
             return self.driver.find_element(By.CSS_SELECTOR, '.dropdown-toggle .hidden-xs').text
         
         
        def get_page_number_text(self):
            # TODO: 实现获取【分页显示信息】的操作方法
            return self.driver.find_element(By.CSS_SELECTOR, '.pagination-info').text
         
         
        def click_login_out(self):
            # TODO 请实现 【用户退出】的操作方法
             self.driver.find_element(By.CSS_SELECTOR, '.dropdown-toggle .hidden-xs').click()
             self.driver.find_element(By.XPATH, '//ul[@]/li[6]/a').click() 

    add_user_page.py代码

     """
     * Page3-【新增用户】页面 
     * 需实现该页面中如下 5 个元素的操作代码,以下元素位置可参照题目附图:
     *
     * 1. 表单框输入【用户名】
     * 2. 表单框输入【登录账号】
     * 3. 表单框输入【密码】
     * 4. 单选框选择【普通用户】
     * 5. 点击【保存】按钮
      
     *  注意1:不要在 Page 类中填写 iframe 切换的代码。
     *  注意2:不要改动已经写好的方法名。
    """
    from selenium.webdriver.common.by import By
    class AddUserPage:
        def __init__(self, driver):
            self.driver = driver
     
         
         
        def input_user_name(self, userName):
            # TODO 实现 表单【用户名】点击和输入 的方法
            self.driver.find_element(By.ID,'userName').clear()
            self.driver.find_element(By.ID,'userName').send_keys(userName)
         
     
         
        def input_login_name(self, loginName):
            # TODO 实现 表单【登录账号】点击和输入 的方法
            self.driver.find_element(By.ID,'loginName').clear()
            self.driver.find_element(By.ID,'loginName').send_keys(loginName)
     
     
         
        def input_login_password(self, loginPassword):
            # TODO 实现 表单【密码】点击和输入 的方法
            self.driver.find_element(By.ID,'password').clear()
            self.driver.find_element(By.ID,'password').send_keys(loginPassword)
     
         
        def click_role(self):
            # TODO 实现 表单【普通用户】单选 的方法
            self.driver.find_element(By.XPATH,'//div[@]/label[2]').click()
     
         
        def click_save_button(self):
            # TODO 实现 表单【保存】按钮点击的方法
            self.driver.find_element(By.XPATH,'//button[@]/i').click() 

    test_web_case.py代码

    import unittest
    from selenium import webdriver
    from selenium.webdriver.firefox.service import Service
     
    from cn.lanqiao.web.login_page import LoginPage
    import time
    from cn.lanqiao.web.add_user_page import AddUserPage
    from cn.lanqiao.web.user_manage_page import UserManagePage
    from selenium.webdriver.common.by import By
     
     
    """
     * 请按照操作步骤编写测试用例
     * 
     * 用例要求:
     * 1.合理使用元素等待时间。
     * 2.请调用 Page 类中的方法实现操作步骤。
     * 3.合理使用 iframe 切换,iframe 切换的代码填写在此文件中。
     * 4.不要改动已经写好的方法名。
     
    """
     
    class TestWebCase(unittest.TestCase):
         
        # 浏览器初始化
        def setUp(self):
            # 不要改动此处 driver 位置
            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)
           
            self.driver.implicitly_wait(10)
             
            self.driver.maximize_window()
             
            # TODO 打开被测系统的网址
            self.driver.get("https://66156b17172d5d50d821fb5b.hz-iframe-svc.simplelab.cn/login")
     
     
        # 请在此方法中续写测试用例
        def test_case(self,):
            # 创建 LoginPage 对象
            login_page = LoginPage(self.driver)
            login_page.input_login_name("admin")
            login_page.input_login_password("admin123")
            login_page.click_login_button()
            time.sleep(2)
            
            
            
             
            # 创建 UserManagePage 对象
            user_manage_page = UserManagePage(self.driver)
            
            self.a = user_manage_page.get_username_text()
            self.assertEqual("蓝桥超管", self.a, "没找到蓝桥超管")
            user_manage_page.click_system_menu()
            user_manage_page.click_user_menu()
            
            
            self.driver.switch_to.frame("iframe2")
            user_manage_page.click_add_user_button()
            self.driver.switch_to.parent_frame()
            
            self.driver.switch_to.frame(self.driver.find_element(By.XPATH, '//iframe[@src="/system/user/add"]'))
            # 创建 AddUserPage 对象
            add_user_page = AddUserPage(self.driver)
            add_user_page.input_user_name("luobo")
            add_user_page.input_login_name("luobo")
            add_user_page.input_login_password("123456")
            add_user_page.click_role()
            add_user_page.click_save_button()
            self.driver.switch_to.parent_frame()
            
            self.driver.switch_to.frame("iframe2")
            
            self.b = user_manage_page.get_page_number_text()
            
            self.assertEqual("显示第 1 到第 2 条记录,总共 2 条记录", self.b, "没找到分页信息")
            
            
            user_manage_page.input_login_name("luobo")
            user_manage_page.click_search_button()
            user_manage_page.delete_user()
            time.sleep(2)
            user_manage_page.click_reset_button()
            time.sleep(2)
            
            self.c = user_manage_page.get_page_number_text()
            self.assertEqual("显示第 1 到第 1 条记录,总共 1 条记录", self.c, "没找到分页信息2")
            
            self.driver.switch_to.parent_frame()
            user_manage_page.click_login_out()
            time.sleep(2)
            
             
             
            # TODO 请调用以上3个实例化对象中的方法完成测试用例代码(具体请参照题目中的用例步骤描述和截图)
             
             
             
             
             
        # 浏览器退出
        def tearDown(self):
            if self.driver:
                self.driver.quit()
                 
             
    if __name__ == "__main__":
        unittest.main()