精华内容
下载资源
问答
  • 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率
    在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相
    ),通常PO模型可以大大提高测试用例的维护效率
     
    优点:可重用,业务和对象分离,代码结构清晰,方便代码维护
     
    核心要素:
    1.PO模式中抽离封装集成一个BasePage类,该基类应该拥有一个只实现webdriver实例的属性
    2.每一个page都继承BasePage,通过driver来管理本page中元素,将page中的操作封装成一个个方法
    3.TestCase继承unittest.Testcase类,并依赖page类,从而实现相应的测试步骤
     
    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,url):
            self.driver = driver
            self.base_url = url
        # 进入网址
        def get(self):
            self.driver.get(self.base_url)
        #元素定位,替代八大定位
        def get_element(self,*locator):
            return self.driver.find_element(*locator)
        #点击
        def left_click(self,*locator):
            ActionChains(self.driver).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 SearchOne(BasePage):
        def __init__(self,driver,url):
            BasePage.__init__(self,driver,url)
        #进入百度
        def open_baidu(self):
            self.get()
        #输入数据
        def input_search_content(self,text):
            self.send_text(text,By.ID,"kw")
        # 点击按钮
        def click_baidu_search(self):
            self.left_click(By.ID, "su")
        def click_open_hao(self):
            self.left_click(By.XPATH,".//*[@id='1']/h3/a[1]")
    3:实现TestCase
    import unittest
    from selenium import webdriver
    from page.page_one import SearchOne
    from page.page_two import SearchTwo
    class BaiBu(unittest.TestCase):
        @classmethod
        def setUpClass(cls) -> None:
            cls.driver = webdriver.Firefox()
            cls.driver.implicitly_wait(10)
        def test001(self):
            url="http://www.baidu.com"
            s = SearchOne(self.driver,url)
            s.open_baidu()
            s.input_search_content("123")
            s.click_baidu_search()
            s.click_open_hao()
            self.driver.switch_to.window(self.driver.window_handles[1])
        def test002(self):
            s=SearchTwo(self.driver,"")
            s.open_baidu_map()
        def tearDown(self) -> None:
        #      self.driver.quit()
            pass
    if __name__ == '__main__':
        unittest.main()
    
    PO模式的优点
     
    1:PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰
    2:页面对象与用例分离,使得我们更好的复用对象
    3:可复用的页面方法代码会变得更加优化
    4:更加有效的命令方式使得我们更加清晰的知道方法所操作的UI元素
     
     
     
     
    展开全文
  • 二、什么是自动化测试框架 三、非PO模式和PO模式优缺点对比 四、如何从0到1搭建PO模型 五、自动化测试框架和PO的关系 六、总结 一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是...

    目录

     

    一、什么是PO模式

    二、什么是自动化测试框架

    三、非PO模式和PO模式优缺点对比

    四、如何从0到1搭建PO模型

    五、自动化测试框架和PO的关系

    六、总结


    一、什么是PO模式

    全称:page object model  简称:POM/PO

    PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性!

    主要分三层:

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

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

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

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

    二、什么是自动化测试框架

    说到自动化框架,我相信很多人应该都听过这个词,但是不知其到底是个什么东西,为什么要用自动化框架。有很多人堆自动化框架都是懵懵懂懂,就跟谈恋爱一样,朦胧美!

    一个好的自动化测试框架是可以让不那么懂技术的人也可以写自动化测试脚本的,

    一个好的自动化测试框架可以减少自动化测试中脚本管理和维护当中的人力物力和财力。

    其实自动化框架的一个最大的意义在于可重用性。因为在框架里,你可以实现很多的通用功能来简化整个脚本的开发过程。并且生成美观的测试报告。

    三、非PO模式和PO模式优缺点对比

    笔者来自公众号:软测之家     更多技术干货,视频资料请加:软件测试技术群:695458161
    非PO模式 PO模式
    面向过程的线性脚本 POM把页面元素定位和业务操作流程分开。实现松耦合。
    复用性差 UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
    维护性差 PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。

    四、如何从0到1搭建PO模型

    非PO模式举个栗子:有如下百度搜索脚本:

    
     
    1. import unittest

    2. from selenium import webdriver

    3. from selenium.webdriver.common.by import By

    4.  
    5. class Test(unittest.TestCase):

    6. def test01(self):

    7. # 打开浏览器

    8. driver = webdriver.Chrome()

    9. # 加载百度首页

    10. driver.get('http://www.baidu.com')

    11. # 在百度搜索栏中输入软件测试

    12. driver.find_element(By.ID, 'kw').send_keys('软件测试')

    13. # 点击百度一下按钮

    14. driver.find_element(By.ID, 'su').click()

    15.  
    16. def test02(self):

    17. # 打开浏览器

    18. driver = webdriver.Chrome()

    19. # 加载百度首页

    20. driver.get('http://www.baidu.com')

    21. # 在百度搜索栏中输入软件测试

    22. driver.find_element(By.ID, 'kw').send_keys('硬件测试')

    23. # 点击百度一下按钮

    24. driver.find_element(By.ID, 'su').click()

    如何把上述栗子改成PO模式呢?

    1、基础层BasePage

    
     
    1. from selenium import webdriver

    2.  
    3. class BasePage:

    4. #构造方法

    5. def __init__(self):

    6. # 打开浏览器

    7. self.driver = webdriver.Chrome() # Alt+Enter

    8. # 加载百度首页

    9. self.driver.get('http://www.baidu.com')

    10.  
    11. #封装定位元素

    12. def find_ele(self,*args):

    13. ele = self.driver.find_element(*args)

    14. return ele

    2、PO层:封装百度页面元素定位,元素对象以及页面操作

    
     
    1. from selenium.webdriver.common.by import By

    2. from base.base_page import BasePage

    3.  
    4. class BaiduPage(BasePage):

    5. #元素定位,

    6. baidu_text_loc = (By.ID, 'kw')

    7. baidu_submit_loc = (By.ID, 'su')

    8. #获得元素对象,

    9. def get_text_obj(self):

    10. ele = self.find_ele(*BaiduPage.baidu_text_loc)

    11. return ele

    12. def get_submit_obj(self):

    13. ele = self.find_ele(*BaiduPage.baidu_submit_loc)

    14. return ele

    15. #页面操作

    16. def search(self,search_string):

    17. self.get_text_obj().send_keys(search_string)

    18. self.get_submit_obj().click()

    3、测试用例层:业务逻辑和数据驱动

    1. from ddt import ddt, data

    2. from po.baidu_page import BaiduPage

    3.  
    4. @ddt

    5. class BaiduTest(unittest.TestCase):

    6.  
    7. @data('软件测试','硬件测试')

    8. def test01(self,seaString):

    9. BaiduPage().search(seaString)

    10. time.sleep(5)

    11.  
    12. if __name__ == '__main__':

    13. unittest.main()

    从上面的PO案例:让我们更加了解清晰PO的优点在于:

    1.POM把页面元素定位和业务操作流程分开。实现松耦合。
    2.UI元素的改变不需要修改业务逻辑代码。只需要找到对应的PO页修改定位即可,数据代码分离
    3.PO能使我们的测试代码提高代码的可读性,高复用性,可维护性。

    五、自动化测试框架和PO的关系

    自动化框架=po+各种封装(日志处理封装,全局配置文件的封装,数据库连接的封装,excel操作封装,数据驱动封装等)

    其实想要胜任UI自动化测试岗位还需要掌握以下内容:

    1.python或java

    2.selenium的API

    3.unittest/pytest单元测试框架

    4.htmltestrunner/allure测试报告

    5.数据驱动dtt(excel,yaml,mysql)或pytest中的fixtrue

    6.关键字驱动:公共类,方法封装,随机数,数据库连接,全局登录

    7.全局配置文件处理

    8.日志处理

    9.断言

    10.第三方库

    11.git和github或码云集成开发!

    12.jenkins持续集成

    这些内容在我的CSDN博客当中基本都有涉猎,大家需要什么就去搜索什么吧!

    六、总结

    全文笔者耗时两小时,纯手打,纯干货,如果您觉得对您有帮助,请点赞,收藏,分享三连!您的支持是笔者最大的动力!

    如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入: Python自动化测试技术群: 953306497 群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    在这里插入图片描述


    作者:来自
    出处:https://blog.csdn.net/ZangKang1
    原创不易,欢迎转载,但未经作者同意请保留此段声明,并在文章页面明显位置给出原文链接。

    展开全文
  • Selenium自动化-PO模型

    2021-06-15 20:42:30
    在自动化中,Selenium自动化测试中PageObject经常被提及(思想与面向对象特征相同),通常PO模型可以大大提高测试用例维护效率。 优点:重用,业务和对象分离,方便代码维护,代码结构清晰。 po核心要素 1.在PO模式中...

    po模型介绍

    在自动化中,Selenium自动化测试中PageObject经常被提及(思想与面向对象特征相同),通常PO模型可以大大提高测试用例维护效率。
    优点:重用,业务和对象分离,方便代码维护,代码结构清晰。

    po核心要素

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

    po实现

    实例:在百度搜索框输入123点击百度一下。

    实现BasePage
    在这里插入图片描述
    实现Page
    在这里插入图片描述
    实现TestCase
    在这里插入图片描述

    运行成功效果
    在这里插入图片描述

    展开全文
  • 自动化po模型

    2021-06-15 20:22:33
    在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 优点:重用,业务和对象分离,代码结构清晰,方便代码维护 实现BasePage ...

    1、po模型介绍

    • 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相
      同),通常PO模型可以大大提高测试用例的维护效率
    • 优点:重用,业务和对象分离,代码结构清晰,方便代码维护

    实现BasePage
    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, url):
            self.driver = driver
            self.base_url = url
    
        # 进入网址
        def get(self):
            self.driver.get(self.base_url)
    
        # 元素定位,替代八大定位
        def get_element(self, *locator):
            return self.driver.find_element(*locator)
    
        # 点击
        def left_click(self, *locator):
            self.driver.find_element(*locator).click()
            # ActionChains(self.driver).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])
    
        # 用于断言
        def get_title(self):
            return self.driver.title
    

    实现dianjishijian
    dianjishijian代码实现

    po001.py

    from Basepage.one import BasePage
    from selenium.webdriver.common.by import By
    
    
    class Search(BasePage):
        def __init__(self, driver, url):
            BasePage.__init__(self, driver, url)
    
        # 进入百度
        def get_bai(self):
            self.get()
    
        # 获取输入框id
        def shuru(self, test):
            self.send_text(test, By.ID, "kw")
    
        # 点击
        def dianji(self):
            self.left_click(By.ID, "su")
    

    实现TestCase
    TestCase代码

    test_001.py

    import unittest
    from selenium import webdriver
    from dianjishijian.po001 import  Search
    
    
    class TeseClass(unittest.TestCase):
        def setUp(self) -> None:
            print("开始")
            self.driver = webdriver.Firefox()
            self.driver.implicitly_wait(10)
        def test001(self):
            url = "http://www.baidu.com"
            b = Search(self.driver,url)
            b.get_bai()
            b.shuru("123")
            b.dianji()
        def tearDown(self) -> None:
            print("结束")
    
    if __name__ == '__main__':
        unittest.main()
    

    多个po(界面操作)

    po002.py

    from Basepage.one import BasePage
    from selenium.webdriver.common.by import By
    
    
    class Search2(BasePage):
        def __init__(self, driver, url):
            BasePage.__init__(self, driver, url)
    
        # 点击
        def hao_123(self):
            self.left_click(By.XPATH, ".//*[@id='1']/h3/a[1]")
        def switch_windowss(self,n):
            self.switch_window(n)
    

    po003.py

    from Basepage.one import BasePage
    from selenium.webdriver.common.by import By
    
    
    class Search3(BasePage):
        def __init__(self, driver, url):
            BasePage.__init__(self, driver, url)
    
        # 点击
        def baidu(self):
            self.left_click(By.XPATH, ".//*[@id='userCommonSites']/ul/li[6]/div/a")
    

    test_001.py

    import unittest from selenium import webdriver from dianjishijian.po001 import Search from dianjishijian.po002 import Search2 from dianjishijian.po003 import Search3
    
    
    class TeseClass(unittest.TestCase):
        @classmethod
        def setUpClass(cls) -> None:
            print("开始")
            cls.driver = webdriver.Firefox()
            cls.driver.implicitly_wait(10)
    
        def test001(self):
            url = "http://www.baidu.com"
            b = Search(self.driver, url)
            b.get_bai()
            b.shuru("123")
            b.dianji()
    
        def test002(self):
            url = ""
            c = Search2(self.driver, url)
            c.hao_123()
            c.switch_windowss(1)
    
        def test003(self):
            url = ""
            d = Search3(self.driver, url)
            d.baidu()
    
        @classmethod
        def tearDownClass(cls) -> None:
            print("结束")
    
    
    if __name__ == '__main__':
        unittest.main()
    

    运行结果图
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • UI自动化po模型

    千次阅读 2019-07-23 11:30:21
    研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识。 从最初无结构的代码,到类的使用,方法封装,从原始函数调用,到重定义函数。从变量驱动,到数据驱动...
  • UI自动化PO模型

    2021-04-25 23:08:39
    POM PageProject:页面及对象 ...ui自动化pom模型 https://www.bilibili.com/video/BV1Vf4y167EP?p=2 https://www.bilibili.com/video/BV1zD4y1Q7Bv?from=search&seid=6991724177000396881 https://
  • 编写公用的父类方法 from selenium import webdriver from selenium.webdriver.common.action_chains import ... '''实例BasePage类时,事先执行的__init__方法,该方法需要传递参数''' def __init__(sel
  • 一、Po模型的基本使用 1、创建baseDemo包,创建BasePage类 代码: from selenium.webdriver.common.action_chains import ActionChains #鼠标操作 class BasePage(): # 实例BasePage类时,事先执行的__init__...
  • 目录大纲1. po模型介绍2. PageObject设计模式3. PO的核心要素4. 非PO实现4.1 代码展示4.3 代码分析5....在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相同),通常PO模型
  • 全名Page Object模式,他是一种设计思想,是为了解决自动化测试过程中随着代码量的增加导致的大量代码难以维护、难以扩展、可读性极差等灾难性的事件的方案,所谓Page Object及页面对象,页面对象是哪些东西呢?...
  • def tearDown(self): self.driver.quit() 但所有模块都有相同的地方就需要一个公共的模块,所有的页面模块都要继承这个基础模块 class Page(object): #初始参数 def __init__(self,driver,base_url=...
  • po模型设计思想 Page Object 模式主要是将每个页面设计为一个class,其中包含页面中的需要测试的元素(按钮,输入框...Page Object模式是一种自动化测试设计模式,将页面定位和业务操作分开,分离测试对象(元素对象)
  • 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 脚本录制的方法 我这里用的是火狐实现脚本录制 本地的插件 安装成功后...
  • 自动化测试】——什么是PO模型

    千次阅读 2020-10-26 10:43:15
    PO模型又叫PO设计模式,是selenium自动化测试中最佳的设计模式之一,主要体现在对界面交互细节的封装,将页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,在实际测试中只需要关注业务流程,从而提高可...
  • 自动化测试PO模式

    万次阅读 多人点赞 2018-12-13 14:16:56
    1.页面对象模型(PO)是一种设计模式,用来管理维护一组页面元素的对象库. 2.在PO下,应用程序的每一个页面都有一个对应的Page类. 3.每一个Page类维护着该页面的元素集和操作这些元素的方法. PO的好处? 1.代码可读性强 ...
  • 关于selenium测试框架首先想到的就是PO模型,简单说下PO模型PO模型的概念和理解:PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息、相关操作都放到一个类中,从而使具体的测试用例变成了...
  • 二、什么是自动化测试框架 三、非PO模式和PO模式优缺点对比 四、如何从0到1搭建PO模型 五、自动化测试框架和PO的关系 六、总结 一、什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是...
  • selenium自动化测试框架PO设计模式

    千次阅读 2019-06-21 22:20:54
    整理一下 selenium 自动化测试实践中使用较多的 PO(PageObject)设计模式 面向对象的特性:封装\继承\多态.在自动化中一样适用,selenium 自动化测试中有一个名字常常被提及 PageObject(思想与面向对象的特性相同),...
  • 一、Selenium IDE脚本 1. 什么是Selenium IDE脚本? selenium IDE的command命令也被成为selenese。 selenese命令最多有两个参数,一个是target,一个是value。...waitForText语句在测试执行时用来判
  • 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博文 二、Selenium前六篇博文地址: 【Selenium篇...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,078
精华内容 1,631
关键字:

自动化测试po模型