PO设计模式是selenium自动化测试中最佳的设计模式之一

这篇具有很好参考价值的文章主要介绍了PO设计模式是selenium自动化测试中最佳的设计模式之一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Page Object Model:PO设计模式是selenium自动化测试中最佳的设计模式之一,主要体现在对界面交互细节的封装,也就是在实际测试中只关注业务流程就OK了传统的设计中,在新增测试用例之后,代码会有以下几个问题:1.易读性差:一连串的find element会使代码显得杂乱无章2.可扩展性不好:用例孤立,无法扩展3.可复用性差:无公共方法,很难复用4.可维护性差:一旦元素变化,需要维护修改大量测试用例 因此考虑到优化:  PO模式是一种自动化测试设计模式,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性。
PO设计模式是selenium自动化测试中最佳的设计模式之一,软件测试工程师,软件测试,自动化测试,设计模式,selenium,测试工具,软件测试,程序人生,自动化测试,功能测试

首先抽象封装一个BasePage类,这个基类拥有一些指向Webdriver实例的属性,然后每一个Page继承基类BasePage,可以通过driver管理每一个Page中的元素,而且在Page中将这些操作封装为一个一个的方法。TestCase继承unittest里面的TestCase类,并且依赖page类,进行组织测试步骤的工作。

这样做的好处,就是有元素变化,只需要维护每一个Page就行了,测试步骤变化,只需要维护TestCase即可

PO各个核心要素的介绍:

BasePage:

class BasePage(object):
    def __init__(self,driver):
        self.driver = driver
 
    pass

  Page:

from SeleniumProject.PO.BasePage import BasePage
class LoginBase(BasePage):
    # 定位元素,括号中是通过find_element来获取元素的属性
    uname = ()
    pwd = ()
 
    def set_uname(self,uname):
        name =self.driver.find_element(*LoginBase.uname)
        name.send_keys("用户名")
    def set_pwd(self,pwd):
        password = self.driver.find_element(*LoginBase.pwd)
        password.send_keys("密码")
 
    pass

TestCase:

from unittest import TestCase
import unittest
from selenium import webdriver
class Test_Login(TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get("https://cn.bing.com/")
 
    # 测试步骤
    def test_Login(self):
        self.driver.get(self.base_url)
        pass
 
    def tearDown(self):
        self.driver.quit()
 
if __name__ == "__main__":
    unittest.main()

下面举一个简单的例子来看一下PO模式:

业务要求就是,用Chrome浏览器,在https://cn.bing.com/中搜索“墨菲特”,然后点击搜索按钮,再关闭浏览器

基类BasePage类:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
 
class BasePage(object):
    """BasePage封装所有页面的公有方法,例如url、driver、find_element"""
    # 构造函数里面的参数就是类的所有参数
    def __init__(self,selenuime_driver,base_url):
        self.driver = selenuime_driver
        self.url = base_url
 
    # 定义一个私有方法,其他类不能调用该方法
    def _open(self,url):
        self.driver.get(url)
        self.driver.maximize_window()
 
    # 定义open()方法,调用_open()方法
    def open(self):
        self._open(self.base_url)
 
    # 重写find_element()方法,参数为任意数量的(带*的参数)
    # 此方法是为了保证元素是可见的
    def find_emelemt(self,*loc):
        try:
            # 保证元素可见
            WebDriverWait(self.driver,10).until(EC.visibility_of_all_elements_located(loc))
            return self.driver.find_element(*loc)
        except:
            print("页面中没有%s %" % (self.loc))
 
    # 定义script()方法,用于执行JS脚本,比方上上传文件啥的
    def script(self,src):
        self.driver.excute_script(src)
 
    # 定义页面跳转方法,比方说有的页面有frame嵌套
    def switch_frame(self,loc):
        return self.driver.switch_to_frame(loc)
 
    # 重新定义send_keys()方法,为了保证搜索按钮是否存在,还有有的输入框中默认有值,要清空
    def send_keys(self,loc,value,clear_first=True,click_first=True):
        try:
            # getattr方法相当于实现了self.loc
            loc = getattr(self,"_%s"%loc)
            # 是否存在搜索按钮
            if click_first:
                self.find_element(*loc).click()
            # 清空搜索框中的值,并输入需要搜索的值
            if clear_first:
                self.find_emelemt(*loc).clear()
                self.find_emelemt(*loc).send_keys(value)
 
        except:
            print("页面上未找到%s元素"%(self.loc))

Page类:

from selenium.webdriver.common.by import By
from SeleniumProject.PO.BasePage import BasePage
 
class SearchPage(BasePage):
    # 定位元素
    search_loc = (By.NAME,"q") #搜索框
    btn_loc = (By.NAME,"go")    #搜索按钮
 
    # 重写父类的open()方法
    def open(self):
        self._open(self.base_url)
 
    def search_content(self,content):
        # 调用父类的find_emelemt,然后将本类的参数传入
        content1 =  self.find_emelemt(*self.search_loc)
        content1.send_keys(content)
 
    def btn_click(self):
        btn1 = self.find_emelemt(*self.btn_loc)
        btn1.click()

 TestCase类:

from unittest import TestCase
import unittest
from selenium import webdriver
from time import sleep
from SeleniumProject.PO.Search import SearchPage
class CaseRun(TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        sleep(3)
        self.url = "https://cn.bing.com/"
        sleep(3)
        self.content = "墨菲特"
    # 测试步骤
    def test_search(self):
        bing_page = SearchPage(self.driver,self.url)
        bing_page.open()
        sleep(3)
        bing_page.search_content(self.content)
        sleep(3)
        bing_page.btn_click()
        sleep(3)
 
    def tearDown(self):
        self.driver.quit()
 
if __name__ == "__main__":
    unittest.main()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

PO设计模式是selenium自动化测试中最佳的设计模式之一,软件测试工程师,软件测试,自动化测试,设计模式,selenium,测试工具,软件测试,程序人生,自动化测试,功能测试

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

PO设计模式是selenium自动化测试中最佳的设计模式之一,软件测试工程师,软件测试,自动化测试,设计模式,selenium,测试工具,软件测试,程序人生,自动化测试,功能测试

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!   文章来源地址https://www.toymoban.com/news/detail-681507.html

到了这里,关于PO设计模式是selenium自动化测试中最佳的设计模式之一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium UI自动化PO模式测试框架搭建

    熟悉业务-》确定方案-》选取场景-》了解前端-》定位元素-》编写脚本-》运行优化-》回归报告-》项目汇总 价值意义: 自动化执行需要:模块化 需要可制定化执行 可复用性 PO模式: 将页面定位和业务分开,元素的定位单独处理,执行脚本单独封装。维护方便。 封装BasePag

    2024年02月04日
    浏览(36)
  • UI自动化测试:Selenium+PO模式+Pytest+Allure整合

    本人目前工作中未涉及到WebUI自动化测试,但为了提升自己的技术,多学习一点还是没有坏处的,废话不多说了,目前主流的webUI测试框架应该还是selenium,考虑到可维护性、拓展性、复用性等,我们采用PO模式去写我们的脚本,本文档也主要整合了Selenium+PO模式+Pytest+Allure,下

    2024年02月08日
    浏览(33)
  • Web 自动化测试(Selenium) PO 模型

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 1. po 模型介绍 在自动化中,Selenium 自动化测试中有一个名字经常被提

    2024年04月13日
    浏览(25)
  • po+selenium+unittest自动化测试项目实战

    1、新建一个包名:common(用于存放基本函数封装) (1)在common包下新建一个base.py文件,作用:页面操作封装。base.py文件代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

    2024年01月17日
    浏览(36)
  • web自动化测试-PageObject 设计模式

    为 UI 页面写测试用例时(比如 web 页面,移动端页面),测试用例会存在大量元素和操作细节。当 UI 变化时,测试用例也要跟着变化, PageObject 很好的解决了这个问题。 使用 UI 自动化测试工具时(包括 selenium,appium 等),如果无统一模式进行规范,随着用例的增多会变得难

    2024年02月14日
    浏览(32)
  • 自动化测试po模式是什么

    全称:page object model  简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage:封装一些最基础的selenium的原生的api方法,元素定位,框架跳转等。 2.PO层:元素定位、获得元素对象,页面动作 3.测试用例层

    2024年01月19日
    浏览(35)
  • Selenium基于Python web自动化测试框架 -- PO

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的

    2024年02月22日
    浏览(35)
  • UI 自动化测试框架:PO 模式+数据驱动!

    PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与面向对象相似,能让测试代码变得可读性更好,可维护性高,复用性高。 PO 模式可以把一个

    2024年02月03日
    浏览(28)
  • UI 自动化测试框架:PO模式+数据驱动

    1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。 PO 模式的设计思想与面向对象相似,能让测试代码变得可读性更好,可维护性

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包