目录
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