您的位置:首页 > 编程语言 > Python开发

python+selenium自动化测试-24设计模式Page Object(PO)

2020-01-12 17:01 549 查看

Page Object(页面对象)是Selenium自动化测试项目开发实践的最佳设计模式之一。

Page Object主要体现了面向对象的两大基本特征:继承和封装。对界面交互细节的封装,这样可以使测试用例更关注业务而非界面细节,提高测试用例的可读性;通过抽象封装成一个BasePage类(封装公共方法),所有页面对象(Page类)均继承该基类,大幅减少冗余的代码,同时也提高了可维护性。

1、Page Object工作原理

Page继承BasePage,Page依赖TestCase,Webdriver在BasePage里面做环境初始化。

2、Page Object应用示例

2.1、Testlogin.py
# -- coding: utf-8 --
from PageObject_design.LoginPage import *
from selenium import webdriver
from time import sleep
import unittest

driver=webdriver.Firefox()
class myUnit(unittest.TestCase):

def setUp(self,driver=driver):
print('setUp正在执行...')
driver.implicitly_wait(10)
driver.maximize_window()

def tearDown(self):
print("tearDown执行完毕!")

def test_login(self):
LoginPage.type_login(self.driver,"username","password")
2.2、LoginPage.py
# -- coding: utf-8 --
from PageObject_design.BasePage import *
from selenium.webdriver.common.by import By

class LoginPage(basePage):
#首页登录页面
url='/'
#元素定位器
username_loc=(By.ID,'username')
password_loc=(By.ID,'pwd')
submit_loc=(By.CLASS_NAME,'login-button')

#用户名输入框元素
def type_username(self,username):
self.find_element(*self.username_loc).clear()
self.find_element(*self.username_loc).send_keys(username)

# 密码输入框元素
def type_password(self,password):
self.find_element(*self.password_loc).clear()
self.find_element(*self.password_loc).send_keys(password)

#登录按钮元素
def type_submit(self):
self.find_element(*self.submit_loc).click()

#登录功能模块封装
def type_login(driver,username,password):
#测试用户名密码是否可以登录
login_page = LoginPage(driver)
login_page.open()
login_page.type_username(username)
login_page.type_password(password)
login_page.type_submit()
2.3、BasePage.py
# -- coding: utf-8 --
from time import sleep
from selenium.webdriver.common.by import By

class basePage(object):
#页面基础类,定义父类BasePage
def __init__(self,driver):
self.driver=driver  #self指的是类实例对象本身,和java里面的this是类似的
self.base_url='这里填入你的测试IP地址'
self.timeout=10

#打开不同的子页面
def _open(self,url):
rurl=self.base_url+url
self.driver.maximize_window()
self.driver.get(url)
sleep(2)

def open(self):
self._open(self.url)

#元素定位封装
def find_element(self,*loc): #*loc任意数量的位置参数(带单个型号参数)
return self.driver.find_element(*loc)

def find_elements(self,*loc):
return self.driver.find_elements(*loc)
  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
梦中楼人 发布了44 篇原创文章 · 获赞 15 · 访问量 1万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: