当前位置: 移动技术网 > IT编程>脚本编程>Python > Selenium +Python入门(PageObject思想篇)

Selenium +Python入门(PageObject思想篇)

2020年07月09日  | 移动技术网IT编程  | 我要评论

PageObject介绍

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

PageObject模式

Selenium PO 官方总结:
在这里插入图片描述
总结:

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思想。

简单项目结构:
在这里插入图片描述
用例部分:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网