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

wxm192939 2022-01-15 03:30:33 阅读数:433

自动化 测试 设计 自动 模式

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模式后

减少冗余代码

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

提高可维护性,可扩展性

版权声明:本文为[wxm192939]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/weixin_42365095/article/details/120999342