欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Selenium +Python入门(PageObject思想篇)

程序员文章站 2022-03-10 22:57:51
PageObject介绍1)2013 Martin Flower 提出2)2015 Selenium 官方加入PO思想PageObject模式Selenium PO 官方总结:总结:1)⽤公共⽅法代表UI所提供的功能2)尽量不要公开页面的内部细节:控件定位逻辑等,只把业务api暴露给用户3)PO⽅法内一般不要加断⾔4)方法返回其他PageObject或返回⽤于断⾔的数据5)不需要建模UI内的所有业务元素6)相同的业务不同的结果,可以建模为不同的⽅法基于POM的⽤例组织结构pag...

PageObject介绍

1)2013 Martin Flower 提出
2)2015 Selenium 官方加入PO思想

PageObject模式

Selenium PO 官方总结:
Selenium +Python入门(PageObject思想篇)
总结:

1)⽤公共⽅法代表UI所提供的功能
2)尽量不要公开页面的内部细节:控件定位逻辑等,只把业务api暴露给用户
3)PO⽅法内一般不要加断⾔
4)方法返回其他PageObject或返回⽤于断⾔的数据
5)不需要建模UI内的所有业务元素
6)相同的业务不同的结果,可以建模为不同的⽅法

基于POM的⽤例组织结构

page:完成对页⾯的封装
driver:完成对web、android、ios、接⼜的驱动
testcase:调⽤各类page完成业务流程并进⾏断⾔
data:配置⽂件和数据驱动
utils:其他便捷的功能的高级封装,可选择使用

借鉴:Python对PO的封装(不推荐)

mozilla pydom

POM编写⽤例顺序

1)根据界⾯封装page类与⽅法,实现可以为空
2)编写⽤例,不断重构明确page⾥⽅法的⼊参和返回值
3)开始实现page内的⽅法
4)调试

整体类似TDD风格。

简单实例演练(无数据驱动和报告,以后学习后继续更新)

以企业微信做了个简单的登录注册练习,主要是在于理解PO思想。

简单项目结构:
Selenium +Python入门(PageObject思想篇)
用例部分:

class TestIndex:
    def setup(self):
        self.index = Index()

    def test_register(self):
        """注册"""
        self.index.goto_register().register("测试科技有限公司1")

    def test_login(self):
        """登陆"""
        self.index.goto_login().goto_register().register("测试科技有限公司2")

    def teardown(self):
        self.index.close_page()

Page 父类:

class BasePage:
    """BASIC Page PO"""
    
    def __init__(self, driver: WebDriver = None):
        if driver is None:
            self._driver = webdriver.Chrome()
            self._driver.implicitly_wait(5)

            self._driver.get(self._base_url)
        else:
            self._driver = driver

    def close_page(self):
        sleep(10)
        self._driver.quit()

Index 类:

class Index(BasePage):
    """Index页面 PO"""
    _base_url = "https://work.weixin.qq.com/"

    def goto_register(self):
        """跳转注册页面"""
        self._driver.find_element_by_link_text("立即注册").click()
        return Register(self._driver)

    def goto_login(self):
        """跳转登陆页面"""
        self._driver.find_element_by_link_text("企业登录").click()
        return Login(self._driver)

最后,本人测试小白一枚,第二次写博客,POM还在学习中,有写的不妥的地方还望大家多多指出,加油加油!!!

本文地址:https://blog.csdn.net/qq_42841075/article/details/107187456