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()
原文地址:https://www.cnblogs.com/canghai1024/p/13203829.html