Selenium POM
tsbc@vip.qq.com
Ray
-
什么是POM
-
为什么要引入POM
-
如何构建POM
什么是POM?
POM全称是:Page Object Model(页面对象模型)
所以POM只是一种开发模式,我们做Selenium自动化所使用的一种开发模式。
为什么要引入POM?
- 为了减少代码开发工作量,提高代码重用性
- 为了提高代码的可读性
- 为了减轻后期维护代码的工作量
Page Object Model的实现,就是通过分离测试对象和测试脚本的抽象来实现的。
如何构建POM?
首先,我们要分离测试对象(元素对象)和测试脚本(用例脚本)
如图构建PO模式脚本目录结构:
data目录用来存储 数据文件
result 目录用来存储测试报告
result\image 目录用来存储截图快照
testcase 目录用来存放要执行的测试脚本,只要是case,全部以“case”为文件开头
testcase\public 目录用来存放公共方法,和重定义过的通用方法
testcase\PO 目录用来存放操作的Page页面(BasePage+各个页面脚本)
test_doc 目录存储测试用例设计等相关文档
#Action
def open(self):
#调用page中的_open打开连接
self._open(self.base_url, self.pagetitle)
#调用send_keys对象,输入用户名
def input_username(self, username):
self.find_element(*self.username_loc).send_keys(username)
#调用send_keys对象,输入密码
def input_password(self, password):
self.find_element(*self.password_loc).send_keys(password)
#调用send_keys对象,点击登录
def click_submit(self):
self.find_element(*self.submit_loc).click()
两种模式:登录功能代码
def test_login_mail(self):
driver = self.driver
driver.get("http://mail.126.com")
driver.find_element_by_id("idInput").clear()
driver.find_element_by_id("idInput").send_keys("auto_tester")
driver.find_element_by_id("pwdInput").clear()
driver.find_element_by_id("pwdInput").send_keys("123456")
driver.find_element_by_id("loginBtn").click()
from PO import LoginPage
def test_login(self):
login_page = LoginPage.LoginPage(self.driver,self.url,self.title)
login_page.open()
#调用用户名输入组件
login_page.input_username("admin")
login_page.input_password("111111")
login_page.click_submit()
LoginPage.py
CaseLogin_po.py
CaseLogin.py
PO模式
普通模式
PO的思想:页面中要操作元素的动作,全部进行独立定义,每一个方法都是独立的组件,而这个Page页面相当于是组件仓库。然后再通过Case脚本页面中,通过调用组件方法来拼凑自动化用例脚本。(注:对于一些通用的公共方法我们可以单独创建一个Base.py脚本页面进行定义存放。)
POM总结
- 通过使用POM进行重新构造代码结构后,发现测试用例代码的可读性提高很多;
- 元素写成组件的方式,不需要每次都写findElement直接在脚本中调用组件就可以使用;
- 在用例脚本中,我们输入 login_page并敲入一个点时,LoginPage页面的元素对象组件都显示出来;
- 并且定义好的PageObject组件可以重复在其它的脚本中进行使用,减少了代码的工作量,也方便对脚本进行后期的维护管理;
- 当元素属性发生变化时,我们只需要对一个PageObaject页面中的对象组件定义进行更改即可。
Text
PO DEMO
thank you!
By: Ray
tsbc@vip.qq.com
pom
By Chen Mir
pom
- 1,375