• PO模式设计


    PO模型

    page object针对页面元素进行操作,提取所有页面作为不同的对象,将页面中的操作流程,作为页面的业务对象

    1.基础类
    提供页面元素获取的方法,提供浏览器初始化的方法,提供释放资源的方法

    #页面公共方法
    from selenium import webdriver

    class BasePage(object):
    #初始化方法
    def __init__(self,browser,url):
    self.driver = self.open_browser(browser)
    self.driver.get(url)
    self.driver.implicitly_wait(10)

    #元素定位方法
    def locator(self,locator):
    el = self.driver.find_element(*locator)
    return el
    #浏览器释放方法
    def quit(self):
    self.driver.quit()

    #访问指定URL
    def visit_url(self,url):
    self.driver.get(url)
    self.driver.maximize_window()

    #浏览器启动方法
    def open_browser(self,browser):
    if browser == 'ff':
    driver = webdriver.Firefox()
    # self.driver.implicitly_wait(10)
    return driver
    elif browser == 'ie':
    driver = webdriver.Ie()
    return driver
    # self.driver.implicitly_wait(10)
    elif browser == 'cc':
    driver = webdriver.Chrome()
    # self.driver.implicitly_wait(10)
    return driver


    2.页面对象类(继承于基础类)
    login页面,进行登录操作,首先进行商品搜索业务

    #页面用于操作登录业务
    from python全栈.pageobject_demo.basePage.base_page import BasePage
    from selenium.webdriver.common.by import By
    from time import sleep

    class LoginPage(BasePage):
    #页面的操作业务流程
    #登录页面的url
    url = 'http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'
    #登录页面的元素
    username = (By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[1]/input')
    pwd = (By.XPATH,'/html/body/div[4]/div/div[2]/div[2]/form/div[2]/input')
    loginButton = (By.XPATH,'/ html / body / div[4] / div / div[2] / div[2] / form / div[3] / button')

    #初始化继承于基础类
    #输入操作
    #输入账号
    def input_user_name(self,text):
    self.locator(self.username).send_keys(text)
    #输入密码
    def input_pwd(self,pwd):
    self.locator(self.pwd).send_keys(pwd)
    #点击登录按钮
    def click_button(self):
    self.locator(self.loginButton).click()
    sleep(5)
    #登录页面流程
    def login(self,text,pwd):
    self.input_user_name(text)
    self.input_pwd(pwd)
    self.click_button()
    self.quit()
    if __name__ == '__main__':
    login = LoginPage('cc',LoginPage.url)
    # login.input_user_name('账号')
    # login.input_pwd('密码')
    # login.click_button()
    # login.quit()
    login.login('账号','密码')


    3.测试用例(继承于unittest.Testcase)
    将页面对象的操作业务,转换为测试执行的用例内容

    #专门用于管理PO下的测试用例
    import unittest
    from python全栈.pageobject_demo.pageObject.login_page import LoginPage
    from ddt import ddt,data,unpack,file_data

    @ddt
    class PageCases(unittest.TestCase):
    def setUp(self) -> None:
    self.login = LoginPage('cc', LoginPage.url)

    def tearDown(self) -> None:
    pass
    # @data(('账号1','密码1'),('账号2','密码2'))
    # @unpack
    @file_data('para.yaml')
    # def test_case1(self,user,pwd):
    # self.login.login(user,pwd)
    def test_case1(self,**user):
    name = user.get('user')
    pwd = user.get('pwd')
    self.login.login(name,pwd)

    if __name__ == '__main__':
    unittest.main()



    PO模型时针对一个指定的系统来进行的,无法像关键字驱动一样,可以实现项目的通用性

     

  • 相关阅读:
    配置Nginx和Apache允许指定域名CORS跨域访问
    当遇到npm ERR! Unexpected end of JSON input while parsing near……时的解决办法
    基于thinkphp开发的项目部署到由宝塔面板创建的LNMP服务器上解决路径出错问题
    在ThinkPHP框架(5.0.24)下引入Ueditor并实现向七牛云对象存储上传图片同时将图片信息保存到MySQL数据库,同时实现lazyload懒加载
    为Sublime Text 3设置优雅的字体
    windows7x64系统中配置mysql5.7.17为本地开发环境(win2008类似)
    SQL Server实现数据的递归查询
    在.net程序中使用System.Net.Mail来发送邮件
    在 Ubuntu 13.10 中搭建Java开发环境
    Windows 系统下载安装 ZooKeeper
  • 原文地址:https://www.cnblogs.com/Murraya/p/12547804.html
Copyright © 2020-2023  润新知