• python+selenium2自动化---PageObject模式+unittest结合实现自动化


    为了降低web自动化测试的维护成本,降低代码冗余,提升测试用例的可读性,故衍生出了PageObject模式。

    PO模式主要体现在对界面交互细节的封装,大体分为如下三层:

    1、BasePage层:封装页面操作最基本的方法,如:打开/关闭浏览器,定位元素等,可被其他对象继承

    2、Page层:提供对具体页面元素的定位、操作方法的封装

    3、业务层:传入具体的参数,组织业务流程,执行自动化

    下面用百度搜索页面进行实践:

    目录结构:

     base_page层代码:

    from selenium import webdriver
    import time
    
    #定义所有页面都需要的基础类
    class BasePage():
        #初始化操作,获取浏览器驱动、地址
        def __init__(self,driver,url):
            self.driver = driver
            self.url = url
        
        #打开浏览器,访问页面
        def open(self):
            self.driver.get(self.url)
            self.driver.maximize_window()
        
        #定位页面元素
        def locator_element(self,*locator):
            print(locator)
            el = self.driver.find_element(*locator)
            return el
    
        #退出浏览器
        def quit(self):
            self.driver.quit()

    Page层代码:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    from Base.base_page import BasePage
    class SearchPage(BasePage):
        input_id = (By.ID,'kw')
        click_id = (By.ID,'su')
    
        #输入搜索内容
        def input_text(self,text):
            self.locator_element(*self.input_id).send_keys(text)
    
        #点击搜索按钮
        def click_element(self):
            self.locator_element(*self.click_id).click()
    
        #百度搜索业务流程
        def search_text(self,text):
            self.open()
            self.input_text(text)
            self.click_element()
    
    class LoginPage(BasePage):
        accout_id = (By.ID,'userAccount')
        password_id = (By.ID,'password')
        login_xpath = (By.CLASS_NAME,'ant-btn')
    
        #输入用户名
        def input_account(self,account):
            self.locator_element(*self.accout_id).send_keys(account)
    
        #输入密码
        def input_password(self,pwd):
            self.locator_element(*self.password_id).send_keys(pwd)
    
        #点击登录
        def click_login_ele(self):
            self.locator_element(*self.login_xpath).click()
    
        #登录流程
        def login(self,account,pwd):
            self.open()
            self.input_account(account)
            self.input_password(pwd)
            self.click_login_ele()
    
    
    if __name__ == '__main__':
        driver = webdriver.Chrome()
        url = 'http://www.baidu.com'
        text = '大学'
        search_page = SearchPage(driver,url)
        search_page.search_text(text)

    测试用例层:

    import time
    import unittest
    from selenium import webdriver
    from ddt import data,ddt,unpack
    
    from PageObject.search import SearchPage,LoginPage
    
    @ddt
    class PageObjectUnit(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.implicitly_wait(10)
    
        def tearDown(self):
            time.sleep(5)
            self.driver.quit()
    
        @data(('http://www.baidu.com','大学'))
        @unpack
        def test_search_page(self,url,text):
            """测试百度搜索页"""
            search_page = SearchPage(self.driver,url)
            search_page.search_text(text)
    
        @data(('xxxxxxxx/login','xxxxxxx','123456'))
        @unpack
        def test_login_page(self,url,account,pwd):
            """测试登录页面"""
            login_page = LoginPage(self.driver,url)
            login_page.login(account,pwd)
            title = self.driver.title
            print(title)
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    专题——递归
    今日听郝斌老师鸡汤
    线性结构的两种常见应用之一 队列
    线性结构的两种应用之一——栈
    C++常用库函数
    洛谷 标志重捕法?
    c++复习——临考前的女娲补天 >=.<
    c++复习——类(2)
    c++复习——类(1)
    Python单元测试
  • 原文地址:https://www.cnblogs.com/canghai1024/p/13203829.html
Copyright © 2020-2023  润新知