python+selenium搭建PO模型实例演示

发布时间:2022-04-25 10:17

设计PO模式的方法:

页面对象模型(POM)是一种设计模式,用来管理维护一组web元素集的对象库。

1.基础层base:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。

2.PO层:元素定位、获得元素对象,页面动作。

3.测试用例层:业务逻辑,数据驱动。

三者的关系:PO层继承基础层,测试用例层调用PO层。

案例:非PO模式下有如下百度搜索脚本,如何把这个脚本改为PO模式实现?

# coding = utf-8

import unittest
from selenium import webdriver


class TestCaseBaidu(unittest.TestCase):
def test01(self):
'''case1:打开百度,搜索自动化测试'''
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('自动化测试')
driver.find_element_by_id('su').click()

def test02(self):
'''case2:打开百度,搜索python'''
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_id('su').click()


if __name__ == '__main__':
unittest.main()

1、基础层:base

封装元素定位,元素等待,输入,点击等操作。

base.py脚本如下:

# coding = utf-8

class Base:
'''第一步:构造方法初始化浏览器让页面类,用例类都公用这一个浏览器'''
def __init__(self, driver):
self.driver = driver

'''第二步:封装常见的操作'''
# 元素定位
def local_ele(self, loc):
return self.driver.find_element(*loc)

# 发送文本
def ele_sendkeys(self, loc, value):
self.local_ele(loc).send_keys(value)

# 点击
def ele_click(self, loc):
self.local_ele(loc).click()

#关闭浏览器
def close_browser(self):
self.driver.quit()

2、PO层:pagecalss

PO层:每一个页面是一个pageclass,主要实现元素定位属性信息、业务操作方法封装。

第一步:将百度搜索界面的元素抽离出来(定位的方式、定位的值);

第二步:将元素的操作方法抽离出来;

第三步:将业务操作抽离出来(经常操作的业务绑定在一起)。

baidu_Home.py脚本如下:

# coding = utf-8

from selenium.webdriver.common.by import By
from base import Base
import time

'''# 继承Base,可以直接使用Base中的self.driver'''
class BaiduHome(Base):
'''元素定位方式和属性值'''
search_input = (By.ID, 'kw')
search_btn = (By.ID, 'su')

'''元素操作方法'''
'''调用base的Base类中封装的元素定位方法'''
# 百度搜索框输入方法
def input_search_input(self, value):
self.ele_sendkeys(BaiduHome.search_input, value)

# 百度按钮点击方法
def click_search_btn(self):
self.ele_click(BaiduHome.search_btn)

'''业务操作'''
def search_baidu(self, value):
self.input_search_input(value)
time.sleep(2)
self.click_search_btn()

3、测试用例层:testcaseclass

用例层的testcaseclass中导入base文件的Base类,并继承Base,并且在testcaseclass中实例化PO层pageclass直接会调用其父类Base类的构造方法。

testcase_baidu.py脚本如下:

# coding = utf-8
# Author: wh
# Date: 2022/4/23 17:08

import unittest
from selenium import webdriver
from baidu_Home import BaiduHome
from base import Base

# 继承Base
class BaiduTest(unittest.TestCase, Base):

def setUp(self) -> None:
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 实例化对象,会自动调用Base的构造方法
self.baidu = BaiduHome(driver)

def test01(self):
'''case1:打开百度,搜索python'''
'''业务操作方法调用'''
self.baidu.search_baidu('python')


def test02(self):
'''case2: 打开百度,搜索自动化测试'''
self.baidu.search_baidu('自动化测试')

def tearDown(self) -> None:
self.baidu.close_browser()


if __name__ == '__main__':
unittest.main()

文档下载:python+selenium搭建PO模型实例演示.doc文档

THE END
喜欢就支持一下吧