page object设计模式

1. page object:

对界面交互细节的封装

  • 减少代码的重复
  • 提高测试用例的可读性
  • 提高测试用例的可维护性

2.实例:

#coding=utf-8 #防止乱码
'''------------------------页面test--------------------'''
#导入selenium的webdriver包,使用webdriver API进行自动化脚本开发
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

class page(object):
    '''
    基础类,用于所有页面的继承
    '''
    login_url = 'http://IP/#/login'

    #定义驱动(driver)、基本的URL(base_url)和超时时间(timeout)
    def __init__(self,selenium_driver,base_url=login_url):
        self.base_url=base_url
        self.driver=selenium_driver
        self.timeout=30
        
    #断言
    def on_page(self):
        return self.driver.current_url == (self.base_url + self.url)
        
    #打开url地址
    def _open(self,url):
        #url = self.base_url + url
        url = self.base_url
        self.driver.get(url)
        #设置断言提示信息
        #assert self.on_page(),'Did not land on %s' %url

    #打开地址
    def open(self):
        self._open(self.url)

    #元素定位
    def find_element(self,*loc):
        return self.driver.find_element(*loc)

#元素封装
class LoginPage(page):
    '''
    登录页面模型
    '''
    url='/'
    #定位器
    username_loc=(By.XPATH,"//input[@class='el-input__inner']")
    password_loc=(By.XPATH,"//*[@placeholder='password' and @class='el-input__inner']")
    showpw_loc=(By.XPATH,"//span[@class='show-pwd']")
    button_loc=(By.XPATH,"//button[@class='el-button el-button--primary']")

    def type_username(self,username):
        self.find_element(*self.username_loc).send_keys(username)

    def type_password(self,password):
        self.find_element(*self.password_loc).send_keys(password)

    def showpw(self):
        self.find_element(*self.showpw_loc).click()

    def button(self):
        self.find_element(*self.button_loc).click()

#执行动作
def test_user_login(driver,username,password):
    '''测试获取的用户名/密码是否可以登录'''
    login_page = LoginPage(driver)
    login_page.open()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.showpw()
    login_page.button()
    
def test_user_login1(driver,username,password):
    '''测试获取的用户名/密码是否可以登录'''
    login_page = LoginPage(driver)
    login_page.open()
    login_page.type_username(username)
    login_page.type_password(password)
    login_page.showpw()
    login_page.button()  

def main():
    try:
        driver=webdriver.Chrome()
        #设置账号密码输入
        username='liaoguifen'
        password='liao'
        test_user_login(driver,username,password)
        time.sleep(2)
        error_message =driver.find_element(By.CSS_SELECTOR, ".el-form-item__error").text
        assert(error_message =='密码不能小于6位'),"密码不能小于6位"
#截图        driver.get_screenshot_as_file('C:\\Users\\lgf\\Desktop\\webtest\\sell\\image\\pawd_error.png')
    finally:
        #driver.close()
        driver.quit()
    try:
        driver=webdriver.Chrome()
        #设置账号密码输入
        username='liaoguifen'
        password='liao'
        time.sleep(2)
        test_user_login1(driver,username,password)
        #清除输入框内容
        cl=driver.find_element(By.XPATH,"//input[@class='el-input__inner']").send_keys(chr(127)*int(10))
        time.sleep(2)
        error_message =driver.find_element(By.CSS_SELECTOR, ".el-form-item__error").text
        assert(error_message =='密码不能小于6位'),"密码不能小于6位"
    finally:
        #driver.close()
        driver.quit()

if __name__=='__main__':
    main()

3.将元素与执行动作分类封装再引用对应模块

实例:

1)元素封装,po1.py

#coding=utf-8 #防止乱码
'''------------------------页面page object--------------------'''
#导入selenium的webdriver包,使用webdriver API进行自动化脚本开发
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

class page(object):
    '''
    基础类,用于所有页面的继承
    '''
    login_url = 'http://IP/#/login'
    #定义驱动(driver)、基本的URL(base_url)和超时时间(timeout)
    def __init__(self,selenium_driver,base_url=login_url):
        self.base_url=base_url
        self.driver=selenium_driver
        self.timeout=30
        
    #断言
    def on_page(self):
        return self.driver.current_url == (self.base_url + self.url)
        
    #打开url地址
    def _open(self,url):
        #url = self.base_url + url
        url = self.base_url
        self.driver.get(url)
        #设置断言提示信息
        #assert self.on_page(),'Did not land on %s' %url

    #打开地址
    def open(self):
        self._open(self.url)

    #元素定位
    def find_element(self,*loc):
        return self.driver.find_element(*loc)
        
#元素封装
class pointPage(page):
    '''
    区域管理页面模型
    '''
    url='/'

    #打开导航页签
    NavigationBar_loc=(By.CSS_SELECTOR," .hamburger > path:nth-child(2)")
    def NavigationBar(self):
        self.find_element(*self.NavigationBar_loc).click()
        
    #打开点位列表
    point_loc=(By.CSS_SELECTOR, ".el-submenu:nth-child(2) > .el-submenu__title")
    def point(self):
        self.find_element(*self.point_loc).click

2)执行动作封装,po2.py

#coding=utf-8 #防止乱码
'''------------------------页面page object--------------------'''
#导入selenium的webdriver包,使用webdriver API进行自动化脚本开发
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
#导入程序模块
import sys
sys.path.append("C:/Users/lgf/Desktop/webtest/sell/test_case")
from po1 import pointPage

class point_action():
    def test_point(driver):
        page = pointPage(driver)
        page.NavigationBar()
        print("打开导航列表完成")
        time.sleep(2)
        page.point()
        time.sleep(1)

3)用例执行,po3.py

#设置程序所在目录
import sys
sys.path.append("C:/Users/lgf/Desktop/webtest/sell/test_case")
#导入程序模块
from LOGIN_OUT import LOGIN
sys.path.append("C:/Users/lgf/Desktop/webtest/sell")
from po2 import point_action

class POINT(unittest.TestCase):
      '''点位管理页签测试'''
      def setUp(self):
          self.driver=webdriver.Chrome() #谷歌浏览器
          driver=self.driver
          driver.get("http://IP/#/login")#向浏览器发送网址(URL)
          LOGIN().Login(driver)
          print("开始时间",time.strftime("%Y/%m/%d %H:%M:%S"))#打印当前时间

          #参数数字为像素点
          #print("设置浏览器宽1500、高800显示")
          driver.set_window_size(1500,800)
          
      def test_A_POINT(self):
           '''查询点位'''
           driver=self.driver
           time.sleep(2)#设置等待时间,必须设置,需要在页面暂停便于查找元素操作
           po=pointPage(driver)
           po.test_NavigationBar()
           page.point()
           
      def tearDown(self):
           driver=self.driver 
           LOGIN().Logout(driver)#调用退出
           print("完成时间",time.strftime("%Y/%m/%d %H:%M:%S"))#打印当前时间
           
if __name__ == "__main__":
    unittest.main()
    now = time.strftime("%Y-%m-%d %H-%M-%S")#打印当前时间
    
    #定义报告存放路径
    #fp=open('C:\\Users\\lgf\\Desktop\\webtest\\sell\\html_test\\QYGL_result.html','wb')
    file='C:\\Users\\lgf\\Desktop\\webtest\\sell\\html_test\\'+ now+'testPO_result.html'
    fp=open(file,'wb')
    #定义测试报告,stream指定测试报告文件,title定义标题,description='用例执行情况:'
    runner=HTMLTestRunner(stream=fp,title='售卖系统测试报告',description='用例执行情况:')
    
    runner.run(testunit)#运行测试用例
    fp.close()#关闭报告文件    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值