po:p:page(页面),o:object(对象) po模式学习思路
根据版本迭代的方式进行学习 V1:不使用任何设计模式和单元测试框架 V2:使用UnitTest管理用例 V3:使用方法封装的思想,对代码进行优化 V6:po模式深入封装,把共同操作提取封装 V6:po模式深入封装,把共同操作提取封装
base(基类):page页面中一些公共的方法
Base类:#初始化方法
#查找元素方法
#点击元素方法
#获取文本方法
#截图方法
注意:以上方法封装时,解包只需一次,在查找元素里解包
driver为虚拟的,谁调用base时,谁传入,无需关注他从那来
loc:真正使用loc的方法,只有查找元素时使用
page(页面对象):一个页面封装成一个对象(继承base)
实现:1.模块名:page+实际操作模块名称 如:page_login.py
2.业务对象名:以大驼峰的方式把模块名抄起来,有下划线去掉下划线
3.方法:涉及的元素将每一个元素操作单独封装成一个方法
4.组装:根据需求组装以上上述步骤
scripts/cases:业务层,导包调用page页面
实现:1.模块:test+实际操作模块名称 如:test_login.py
2.业务名称:以大驼峰的方式把模块名抄起来,有下划线去掉下划线
3.方法:1)初始化方法:setup:#实例化页面对象
#前置操作
2) 结束方法:tearDown :关闭驱动
3)测试方法:根据要操作的业务实现
base:
from selenium.webdriver.support.wait import WebDriverWait
class Base():
def __init__(self,driver):
self.driver=driver
pass
def base_find_element(self,loc,timeout=30,poll=0.5):
return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll).until(lambda x:x.find_element(*loc))
def base_click_element(self,loc):
self.base_find_element(loc).click()
pass
def base_input(self,loc,value):
el=self.base_find_element(loc)
el.clear()
el.send_keys(value)
pass
def base_get_test(self,loc):
return self.base_find_element(loc).text
pass
def base_get_screen(self):
self.driver.get_screenshot_as_file("../image/fail.png")
pass
page 1.init
from selenium.webdriver.common.by import By
'''以下为登陆页面元素配置信息'''
login_link=By.PARTIAL_LINK_TEXT,"登录"
username=By.NAME,"username"
password=By.NAME,"password"
button=By.NAME,"click"
text=By.NAME,"text"
2.page_login
mport day05_po.v4.page
from day05_po.v4.base.base import Base
from day05_po.v4.base.base import Base
from day05_po.v4 import page
class PageLogin(Base):
def page_login(self):
self.base_click_element(page.login.link)
def page_input_username(self,username):
self.base_input(page.username,username)
def page_input_password(self,password):
self.base_input(page.password, password)
def page_click_login_button(self):
self.base_click_element(page.button)
pass
def page_get_text(self):
return self.base_get_test(page.text)
def page_click_text_button(self):
pass
def page_get_screen(self):
pass
def page_login(self,username,password):
self.page_login()
self.page_input_username(username)
self.page_input_password(password)
self.page_click_login_button()
pass
script
import unittest
from parameterized import parameterized
from day05_po.v4.page.page_login import PageLogin
def get_data():
return [("11111","111","用户名不存在"),("admin","1","密码错误")]
class TestLogin(unittest.TestCase):
def setUp(self):
self.login=PageLogin()
self.login.base_click_element()
def tearDown(self):
self.login.driver.quit()
pass
@parameterized.expand(get_data())
def test_login(self,username,password,text,expect_result):
self.login.page_login(username,password,text)
msg=self.login.base_get_test()
try:
self.assertEqual(msg,expect_result)
self.login.page_get_screen()
except AssertionError:
pass
|