PO模型简介

一. PO模型介绍

在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相同),通常PO模型可以大大提高测试用例的维护效率

优点:重用,业务和对象分离,代码结构清晰,方便代码维护

二. PageObject设计模式

在这里插入图片描述

三:PO的核心要素

1.在PO模式中抽离封装集成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性
2.每一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个方法
3.TestCase继承unittest.Testcase类,并依赖page类,从而实现相应的测试步骤

四.非PO实现

1.代码展示

在这里插入图片描述

五.PO实现

1.实现BasePage
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains  # 鼠标操作


class BasePage():
    """BasePage封装所有界面都公用的方法。例如driver,find_element等"""
    '''实例化BasePage类时,事先执行的__init__方法,该方法需要传递参数'''

    def __init__(self, driver):
        self.driver = driver

    # 进入网址
    def get(self, url):
        self.driver.get(url)

    # 元素定位,替代八大定位
    def get_element(self, *locator):
        return self.driver.find_element(*locator)

    # 点击
    def left_click(self, *locator):
        ActionChains(self.driver).double_click(self.get_element(*locator)).perform()

    # 输入
    def send_text(self, text, *locator):
        self.driver.find_element(*locator).send_keys(text)

    # 清除
    def clear_text(self, *locator):
        self.driver.find_element(*locator).clear()

    # 表单切换
    def switch_iframe(self, *locator):
        self.driver.switch_to.frame(self.driver.find_element(*locator))

    # 窗口切换
    def switch_window(self, n):
        self.driver.switch_to.window(self.driver.window_handles[n])

在这里插入图片描述

2.实现SearchPage
from selenium.webdriver.common.by import By
from Base.base_page import BasePage


class Search(BasePage):
    def __init__(self, driver):
        BasePage.__init__(self, driver)

    # 进入百度
    def open_baidu(self, url):
        self.get(url)

    # 输入搜索内容
    def input_search_content(self, text):
        self.send_text(text, By.ID, "kw")

    # 点击按钮
    def click_baidu_search(self):
        self.left_click(By.ID, "su")

在这里插入图片描述

3.实现TestCase
import unittest
from selenium import webdriver
from pomodel.Pages.search_pages import Search
class BaiBu(unittest.TestCase):
    def setUp(self) -> None:
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(10)
    def test_serach(self):
        url="http://www.baidu.com"
        s = Search(self.driver)
        s.open_baidu(url)
        s.input_search_content("jack")
        s.click_baidu_search()
    def tearDown(self) -> None:
        self.driver.quit()
if __name__ == '__main__':
    unittest.main()

六.组织代码

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值