基于Unittest的POM设计模式

38 篇文章 6 订阅
23 篇文章 0 订阅


1.目录结构

目录结构

2.基类

'''
    测试用例2
'''
import unittest
from time import sleep

from ddt import ddt, data, unpack
from selenium import webdriver

from class30.page_object.index_page import IndexPage
from class30.page_object.login_page import LoginPage


@ddt
class CaseDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.ip = IndexPage(cls.driver)
        cls.lp = LoginPage(cls.driver)

    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()



    # @file_data('../data/login.yaml')
    @data(['sixiaoyou', 'xxx'])
    @unpack
    def test_01_login(self, username, password):
        self.lp.login(username, password)
        sleep(3)

    def test_02_log_out(self):
        self.ip.logout()
        sleep(3)

    def test_03_search(self):
        self.ip.search('手机')
        sleep(3)

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

3.页面对象类

1.登录页:实现商城的登录行为

'''
    登录页:实现商城的登录行为
'''

# Python版本的登录页
from selenium import webdriver

from class30.base.base_page import BasePage


class LoginPage(BasePage):
    # 页面URL
    url = BasePage.url+'index.php?s=/index/user/logininfo.html'
    # 核心元素: 与业务流程有关的元素
    accounts = ('name','accounts')
    pwd = ('name','pwd')
    button = ('xpath','//button[text()="登录"]')
    # button = {
    #     'by': 'xpath',
    #     'value': '//button[text()="登录'
    # }
    # 业务流程
    def login(self,username,password):
        self._open(self.url)
        self.input(*self.accounts,txt=username)
        self.input(*self.pwd,txt=password)
        self.click(*self.button)


if __name__ == '__main__':
    driver = webdriver.Chrome()
    lp = LoginPage(driver)
    lp.login('sixiaoyou','xxx')

2.手机商品详情页


'''
    手机商品详情页
'''
from selenium import webdriver

from class30.base.base_page import BasePage


class PhonePage(BasePage):
    # url
    url = BasePage.url + 'index.php?s=/index/goods/index/id/2.html'

    # 核心元素
    suite = ('xpath','//li[@data-value="套餐一"]')
    color = ('xpath','//li[@data-value="金色"]')
    memory = ('xpath','//li[@data-value="64G"]')
    number = ('xpath','//input[@id="text_box"]')
    button = ('xpath','//button[@title="加入购物车"]')

    # 添加购物车流程
    def add(self,num):
        self._open(self.url)
        self.click(*self.suite)
        self.sleep(1)
        self.click(*self.color)
        self.sleep(1)
        self.click(*self.memory)
        self.input(*self.number,txt = num)
        self.click(*self.button)

if __name__ == '__main__':
    driver = webdriver.Chrome()
    pp = PhonePage(driver)
    pp.add(3)

3.首页页面对象

'''
    首页页面对象
'''
from class30.base.base_page import BasePage


class IndexPage(BasePage):
    # url
    url = BasePage.url

    # 核心元素
    exit_ = ('link text','退出')
    input_ = ('id','search-input')
    button = ('id','ai-topsearch')

    #登出
    def logout(self):
        self._open(self.url)
        self.click(*self.exit_)

    # 商品搜索
    def search(self,txt):
        self._open(self.url)
        self.input(*self.input_,txt=txt)
        self.click(*self.button)

4.提取分层版本IndexPage

'''
    提取分层版本IndexPage
'''

from class30.base.base_page import BasePage
from class30.page_object.page_element import PageElement
from class30.page_object.index_page_element import IndexPageElement


class IndexPage(BasePage,IndexPageElement,PageElement):

    #登出
    def logout(self):
        self._open(self.index_url)
        self.click(*self.exit_)

    # 商品搜索
    def search(self,txt):
        self._open(self.url)
        self.input(*self.input_,txt=txt)
        self.click(*self.button)

from class30.base.base_page import BasePage


class IndexPageElement(BasePage):
    # url
    url = BasePage.url

    # 核心元素
    exit_ = ('link text','退出')
    input_ = ('id','search-input')
    button = ('id','ai-topsearch')

5.Py文件的数据驱动

'''
    Py文件的数据驱动
    将整个系统的所有页面元素与url等关联内容全部写入这个文件,通过该文件实现元素等信息的管理
'''

from class30.base.base_page import BasePage


class PageElement:
    # 核心元素
    index_page_exit_ = ('link text', '退出')
    index_page_input_ = ('id', 'search-input')
    index_page_button = ('id', 'ai-topsearch')

    # login_page_accounts =


class Url:
    # url
    index_url = 'http://39.98.138.157/shopxo/'
    login_url = 'http://39.98.138.157/shopxo/index.php?s=/index/user/logininfo.html'

4.测试用例类

1.测试用例1

'''
    POM的测试用例

'''

import unittest
from time import sleep

from ddt import ddt, file_data, data, unpack
from selenium import webdriver

from class30.page_object.login_page import LoginPage
from class30.page_object.phone_page import PhonePage


@ddt
class CaseDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.driver.maximize_window()

    # @file_data('../data/login.yaml')
    @data(['sixiaoyou', 'xxx'])
    @unpack
    def test_01_login(self, username, password):
        lp = LoginPage(self.driver)
        lp.login(username, password)

    # 添加购物车
    @file_data('../data/phone.yaml')
    def test_02_add(self,num):
        pp = PhonePage(self.driver)
        pp.add(num)
        sleep(3)




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

2.测试用例2

'''
    测试用例2
'''
import unittest
from time import sleep

from ddt import ddt, data, unpack
from selenium import webdriver

from class30.page_object.index_page import IndexPage
from class30.page_object.login_page import LoginPage


@ddt
class CaseDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.driver = webdriver.Chrome()
        cls.ip = IndexPage(cls.driver)
        cls.lp = LoginPage(cls.driver)

    @classmethod
    def tearDownClass(cls) -> None:
        cls.driver.quit()



    # @file_data('../data/login.yaml')
    @data(['sixiaoyou', 'xxx'])
    @unpack
    def test_01_login(self, username, password):
        self.lp.login(username, password)
        sleep(3)

    def test_02_log_out(self):
        self.ip.logout()
        sleep(3)

    def test_03_search(self):
        self.ip.search('手机')
        sleep(3)

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

5.数据

phone.yaml

-
  num: 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

司小幽

真诚赞赏,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值