Selenium +Python入门(PageObject思想篇)
程序员文章站
2022-06-22 08:47:45
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 官方总结:
总结:
1)⽤公共⽅法代表UI所提供的功能
2)尽量不要公开页面的内部细节:控件定位逻辑等,只把业务api暴露给用户
3)PO⽅法内一般不要加断⾔
4)方法返回其他PageObject或返回⽤于断⾔的数据
5)不需要建模UI内的所有业务元素
6)相同的业务不同的结果,可以建模为不同的⽅法
基于POM的⽤例组织结构
page:完成对页⾯的封装
driver:完成对web、android、ios、接⼜的驱动
testcase:调⽤各类page完成业务流程并进⾏断⾔
data:配置⽂件和数据驱动
utils:其他便捷的功能的高级封装,可选择使用
借鉴:Python对PO的封装(不推荐)
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
上一篇: sass继承+嵌套+条件控制