PO模型
page object针对页面元素进行操作,提取所有页面作为不同的对象,将页面中的操作流程,作为页面的业务对象
1.基础类
提供页面元素获取的方法,提供浏览器初始化的方法,提供释放资源的方法
#页面公共方法
from selenium import webdriver
class BasePage(object):
#初始化方法
def __init__(self,browser,url):
self.driver = self.open_browser(browser)
self.driver.get(url)
self.driver.implicitly_wait(10)
#元素定位方法
def locator(self,locator):
el = self.driver.find_element(*locator)
return el
#浏览器释放方法
def quit(self):
self.driver.quit()
#访问指定URL
def visit_url(self,url):
self.driver.get(url)
self.driver.maximize_window()
#浏览器启动方法
def open_browser(self,browser):
if browser == 'ff':
driver = webdriver.Firefox()
# self.driver.implicitly_wait(10)
return driver
elif browser == 'ie':
driver = webdriver.Ie()
return driver
# self.driver.implicitly_wait(10)
elif browser == 'cc':
driver = webdriver.Chrome()
# self.driver.implicitly_wait(10)
return driver
2.页面对象类(继承于基础类)
login页面,进行登录操作,首先进行商品搜索业务
#页面用于操作登录业务
from python全栈.pageobject_demo.basePage.base_page import BasePage
from selenium.webdriver.common.by import By
from time import sleep
class LoginPage(BasePage):
#页面的操作业务流程
#登录页面的url
url = 'http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'
#登录页面的元素
username = (By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[1]/input')
pwd = (By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[2]/input')
loginButton = (By.XPATH,'/ html / body / div[4] / div / div[2] / div[2] / form / div[3] / button')
#初始化继承于基础类
#输入操作
#输入账号
def input_user_name(self,text):
self.locator(self.username).send_keys(text)
#输入密码
def input_pwd(self,pwd):
self.locator(self.pwd).send_keys(pwd)
#点击登录按钮
def click_button(self):
self.locator(self.loginButton).click()
sleep(5)
#登录页面流程
def login(self,text,pwd):
self.input_user_name(text)
self.input_pwd(pwd)
self.click_button()
self.quit()
if __name__ == '__main__':
login = LoginPage('cc',LoginPage.url)
# login.input_user_name('账号')
# login.input_pwd('密码')
# login.click_button()
# login.quit()
login.login('账号','密码')
3.测试用例(继承于unittest.Testcase)
将页面对象的操作业务,转换为测试执行的用例内容
#专门用于管理PO下的测试用例
import unittest
from python全栈.pageobject_demo.pageObject.login_page import LoginPage
from ddt import ddt,data,unpack,file_data
@ddt
class PageCases(unittest.TestCase):
def setUp(self) -> None:
self.login = LoginPage('cc', LoginPage.url)
def tearDown(self) -> None:
pass
# @data(('账号1','密码1'),('账号2','密码2'))
# @unpack
@file_data('para.yaml')
# def test_case1(self,user,pwd):
# self.login.login(user,pwd)
def test_case1(self,**user):
name = user.get('user')
pwd = user.get('pwd')
self.login.login(name,pwd)
if __name__ == '__main__':
unittest.main()
PO模型时针对一个指定的系统来进行的,无法像关键字驱动一样,可以实现项目的通用性