自动化测试设计模式--POM

1.PO模式

1).页面对象模型(PO)是一种设计模式,用来管理维护一组页面元素的对象库.

2).在PO下,应用程序的每一个页面都有一个对应的Page类.

3).每一个Page类维护着该页面的元素集和操作这些元素的方法.

核心思想是通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化, 只需要调整页面元素封装的代码,提高测试用例的可维护性、可读性。

PO模式可以把一个页面分为三层,基础层、操作层、测试层。

基础层(Base):封装每个页面相同属性和方法,比如元素定位,操作,点击

from selenium import webdriver

class BasePage:
    #封装每个页面共同的属性和方法

    #共同的属性
    def __init__(self, driver):
        self.driver = driver

    #共同的方法 元素定位,操作,点击

    #元素定位
    def loctor(self,loc):
        return self.driver.find_element(*loc)

    #输入
    def send_key(self,loc,value):
        self.loctor(loc).send_keys(value)

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

    def getURL(self,url):
        self.driver.get(url)

操作层(Pageobject):每个页面定义一个类,类中包含元素及操作元素的方法

import time

from selenium.webdriver.common.by import By

from base.BasePage import BasePage


class login_Page(BasePage):
    #定义元素及操作元素

    username=(By.XPATH,".//*[@id='nloginname']")
    passwd=(By.XPATH,".//*[@id='npwd']")
    submit_btn=(By.XPATH,".//*[@id='nsubmit']")
    url="https://passport.ctrip.com/user/login?"

    def login(self,username,passwd):
        #加载页面地址
        self.getURL(self.url)

        #操作元素,输入内容
        self.send_key(loc=self.username,value=username)
        time.sleep(5)
        self.send_key(loc=self.passwd, value=passwd)
        time.sleep(3)
        self.click(loc=self.submit_btn)
        time.sleep(10)

class input(BasePage):
    put = (By.XPATH, ".//*[@id='kw']")
    put1 = (By.XPATH, ".//*[@id='su']")
    url = "http://www.baidu.com/"

    def input(self):
        self.getURL(self.url)
        self.send_key(loc=self.put,value="github")

        self.click(loc=self.put1)



测试层(Testcase):包含业务流程及测试数据

import unittest

from selenium import webdriver

from base import BasePage
from pageobject.login_Page import login_Page


class TestCase_login(unittest.TestCase):
    def test_01_login(self):
        self.driver=webdriver.Firefox()
        loginpage=login_Page(self.driver)
        loginpage.login(username="15991986680",passwd="wxm1314!")

    def test_input(self):
        self.driver = webdriver.Firefox()
        input1 = input(self.driver)
        input1.input()

2. 引入PO模式的好处

1).引入PO模式前

存在大量冗余代码

业务流程不清晰后期维护成本大

2).引入PO模式后

减少冗余代码

业务代码和测试代码被分开,降低耦合性维护成本低

提高可维护性,可扩展性


版权声明:本文为weixin_42365095原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。