zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Populating Next Right Pointers in Each Node
    path sum II
    Path Sum
    [转载]小波时频图
    [转载]小波时频图
    [转载]Hilbert变换及谱分析
  • 原文地址:https://www.cnblogs.com/Xiaojiangzi/p/13203829.html
Copyright © 2011-2022 走看看