
# 定义一个工具类
import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
class UtilsDriver:
__driver = None
@classmethod
def get_driver(cls):
if cls.__driver is None:
cls.__driver = webdriver.Chrome()
cls.__driver.maximize_window()
cls.__driver.implicitly_wait(10)
cls.__driver.get("http://www.tpshop.com/")
return cls.__driver
@classmethod
def quit_driver(cls):
if cls.__driver is not None:
cls.get_driver().quit()
def get_msg():
sleep(3)
return UtilsDriver.get_driver().find_element(By.CSS_SELECTOR,".layui-layer-content").text
# import json
# file = open(r"D:\dcs\dcs12\PO_01\V7\case_data\login_case_data.json","r",encoding="utf-8")
# data = json.load(file) # 把json文件的内容转化为字典格式
# print(data)
# for i in data:
# print(i,data[i])
def case_data(filename):
with open(filename, encoding="utf-8") as f:
case_data = json.load(f)
list_case_data = []
for case in case_data.values():
list_case_data.append(tuple(case.values()))
return list_case_data
# 定义对象库层==》基类==》父类
from selenium.webdriver.support.wait import WebDriverWait
from V7.utils import UtilsDriver
# 定位元素
class BasePage:
def __init__(self):
self.driver = UtilsDriver.get_driver()
def get_element(self,location):
wait = WebDriverWait(self.driver,10,1) # 显示等待
element = wait.until(lambda x: x.find_element(*location))
return element
# 定义操作层
class BaseHandle:
def input_text(self,element,text):
element.clear()
element.send_keys(text)
{
"user_no_exist": {
"username":"17789087654",
"password": "123456",
"code": "8888",
"expect": "账号不存在"
},
"password_error":{
"username":"15708460952",
"password": "1234567",
"code": "8888",
"expect": "密码错误"
},
"username_is_none": {
"username": "",
"password": "123456",
"code": "8888",
"expect": "用户名不能为空"
}
}
# 表示首页页面对象
from selenium.webdriver.common.by import By
from V7.base.base_page import BasePage,BaseHandle
# 对象库存 ==》定位元素
class PageHome(BasePage):
def __init__(self):
super().__init__() # 重写
self.login_btn = By.CSS_SELECTOR,".red"
def find_login_btn(self):
return self.get_element(self.login_btn) # 通过显示等待 获取按钮元素
# 操作层 ==》元素的操作
class HandleHome(BaseHandle):
def __init__(self):
self.home_page = PageHome()
def click_login_bin(self):
self.home_page.find_login_btn().click()
# 业务层 ==》把多个功能结合到一起操作
class HomeProxy:
def __init__(self):
self.home_handle = HandleHome()
def go_login_page(self):
self.home_handle.click_login_bin()
# 定义测试类
from V7.utils import UtilsDriver,get_msg,case_data
from V7.page.page_home import HomeProxy
from V7.page.page_login import LoginProxy
import pytest
login_case_data = case_data(r"./V7\case_data\login_case_data.json")
class TestLogin:
def setup_class(self):
self.home_prxoy = HomeProxy()
self.login_prxoy = LoginProxy()
self.home_prxoy.go_login_page() # 点击登录
def setup(self):
UtilsDriver.get_driver().refresh() # 刷新
def teardown_class(self):
UtilsDriver.quit_driver()
@pytest.mark.parametrize("username,password,code,expect",login_case_data)
def test_login_001(self,username,password,code,expect):
self.login_prxoy.login(username,password,code)
msg = get_msg()
assert expect in msg
[pytest]
addopts = -s -v --html=report/report.html
testpaths = ./V6/scripts
python_files = test_login_*.py
python_classes = Test*
python_functions = test_*